Before you begin
- Connect the Google Ads server to your AI client and authorize the Google account that can access the intended customer account.
- Confirm the Google Ads customer ID. Use explicit campaign, ad-group, ad, budget, and audience IDs when updating existing entities.
- Prepare the campaign objective, budget, conversion actions, locations, audience, inventory mix, creative variants, final URLs, and review owner.
- Use a non-shared budget. Demand Gen campaigns cannot use shared budgets.
- Decide whether you are creating reusable assets or using inline image URLs and YouTube video IDs for a one-off ad.
Understand the structure
A complete Demand Gen build has four layers:- Campaign shell: budget, goal and bidding, dates, device eligibility, geo interpretation, schedule, tracking, and status.
- Ad group: channel controls, locations, language, audience, name, and status.
- Assets: reusable images, videos, text, and calls to action.
- Ads: single-image or multi-asset, carousel, or video-responsive creative.
Step 1 – Create the campaign shell
Required inputs
- Customer ID.
- Campaign name.
- Either an existing non-shared budget ID or a new budget amount.
Defaults and campaign settings
- Status: PAUSED by default. Use ENABLED only when the user explicitly requests launch.
- Campaign goal: CONVERSIONS by default. Other supported goals are CLICKS, CONVERSION_VALUE, and YOUTUBE_ENGAGEMENTS.
- Bid target: optional target CPA for conversions, target ROAS for conversion value, or target CPC for clicks. If omitted, Google Ads uses the closest unconstrained strategy for the selected goal.
- Budget period: DAILY by default. CUSTOM_PERIOD uses the supplied amount as the total campaign budget.
- Start: the next day by default when no start date is supplied. An end date is optional.
- Devices: all devices are eligible by default. You can restrict delivery to desktop, mobile, tablet, or connected TV.
- Positive location interpretation: PRESENCE by default. PRESENCE_OR_INTEREST is also supported. Negative location interpretation remains PRESENCE.
- EU political advertising: defaults to does not contain EU political advertising. Declare the alternative explicitly when applicable.
- Tracking template and final URL suffix: optional.
- Ad schedule: optional day and time windows in 15-minute increments.
Goal and bidding examples
- Conversions → Maximize Conversions, with optional target CPA.
- Conversion value → Maximize Conversion Value, with optional target ROAS. Enter 3.5 for 350%.
- Clicks → Maximize Clicks, with optional target CPC.
- YouTube engagements → Maximize Engagements. Matching YouTube engagement goals must exist for the goal configuration to apply cleanly.
Example prompt
Create a paused Demand Gen campaign in customer 123-456-7890 called “Q4 Product Education”. Create a non-shared daily budget of $100, use the Conversions goal with a $25 target CPA, start tomorrow, target mobile and desktop, use Presence location matching, and add the final URL suffix utm_source=google&utm_medium=demand_gen. Return the campaign and budget IDs. Do not create the ad group yet.
Step 2 – Add an ad group
An ad group belongs to an existing Demand Gen campaign and controls inventory, locations, language, and audience.Required inputs
- Customer ID, campaign ID, and ad-group name.
- Status defaults to PAUSED.
Channel controls
- ALL_CHANNELS: uses Google’s broad Demand Gen inventory preset.
- ALL_OWNED_AND_OPERATED_CHANNELS: uses Google-owned inventory and excludes Display expansion.
- Explicit selection: choose supported YouTube in-stream, YouTube in-feed, YouTube Shorts, Discover, Gmail, or Display inventory.
Targeting
- Locations and exclusions: use human-readable names; HireOtto resolves them to Google Ads locations.
- Language: English by default. Spanish, French, German, Italian, Portuguese, Japanese, Korean, Hindi, and Chinese are also supported by name or code. Leave language unset only when intentional.
- Audience: supply the full Google Ads audience resource name. The current ad-group workflow accepts one audience.
Example prompt
Add a paused ad group to campaign 111222333 called “YouTube Shorts | US | Product”. Use YouTube Shorts only, target the United States, use English, and attach audience customers/1234567890/audiences/987654321. Return the resolved locations and effective channel controls.
Step 3 – Create reusable assets when needed
Create standalone assets when the same creative will be reused across ads. For one-off ads, inline image URLs and YouTube video IDs are usually simpler.Supported reusable asset inputs
- Marketing image: landscape image URL.
- Square marketing image: 1:1 image URL.
- Logo image: logo image URL.
- YouTube video: video ID, not the full YouTube URL.
- Text: text value.
- Call to action: human-readable text such as Apply now, Book now, Contact us, Download, Get quote, Learn more, See more, Shop now, Sign up, Subscribe, Visit site, or Donate now.
Step 4 – Create a paused ad
Every supported ad requires a customer ID, ad-group ID, ad name, ad type, and at least one final URL. The remaining required fields depend on the format.Single image or multi-asset
- Required: business name, at least one headline, at least one description, at least one logo, and at least one landscape or square marketing image.
- Optional: CTA text, additional headlines and descriptions, portrait, tall-portrait, and classic-display image assets.
- Pass image asset resource names or use inline URLs for logo, landscape, and square images.
Carousel
- Required: business name, one logo, at least one headline, at least one description, and 2–10 carousel cards.
- Cards can be existing carousel-card asset resource names or created inline.
- Each inline card can include its own headline, destination, CTA, and supported image asset. If a card destination is omitted, the top-level final URL is used.
- Optional breadcrumbs control the displayed path.
Video or video responsive
- Required: business name, at least one YouTube video, at least one logo, at least one headline, and at least one description.
- Optional: multiple videos, long headlines, CTA text, and breadcrumbs.
- When CTA text is supplied, HireOtto creates the required CTA asset as part of the workflow.
- Use human-readable CTA text—not enum-style text such as LEARN_MORE.
Example prompt
Create a paused multi-asset ad in ad group 444555666 named “Product proof | V1”. Use business name “Acme”, logo [LOGO_URL], landscape image [IMAGE_URL], headline “See projects clearly”, description “Bring planning, budgets and progress into one view”, CTA “Learn more”, and final URL https://example.com/product. Return the ad ID and every asset created inline.
Inspecting Demand Gen structure
Read the live structure before every update:- Campaign settings: campaign ID, status, goal, bidding, budget, devices, geo interpretation, dates, schedule, and tracking.
- Ad-group settings: channel strategy, effective selected channels, locations, exclusions, language, audience, and status.
- Ads: ad ID, format, status, top-level destinations, and format-specific creative asset references.
Update campaigns safely
Supported campaign-level updates include name, status, budget assignment, goal, bidding targets, dates, EU political declaration, geo interpretation, tracking, device eligibility, and schedules.- Pass only fields you intend to change. Omitted fields remain unchanged.
- Targets can be added, changed, or explicitly removed. Changing the campaign goal may also change the bidding strategy.
- A replacement budget must be an existing non-shared budget.
- Omitting devices leaves current device targeting unchanged.
- Schedule updates use REPLACE by default: existing schedules are removed before the new list is added. Use APPEND when you intend to preserve existing windows.
Example prompt
For customer 123-456-7890, read campaign 111222333 and show its current schedule. Then append Saturday 10:00–16:00 without removing existing windows. Keep every other campaign setting unchanged and read the final schedule back.
Update ad groups safely
You can change the ad-group name, status, broad channel strategy, or explicit channel selection. Location, language, and audience changes are not part of the current ad-group update workflow; create a new structure when those need to differ. Before changing inventory, read the current effective channels. Google may infer channel values from a broad strategy, and some UI channels may not be exposed by the connected API client.Direct ad updates versus creative replacement
Direct update: preserve the ad ID
Use a direct ad update for the top-level final URL, mobile final URL, tracking template, final URL suffix, supported custom parameters, or status. Omitted fields remain unchanged.- Passing an empty tracking template or suffix clears that field.
- Updating custom parameters replaces the complete existing set. Include every parameter you want to keep.
- A direct destination update does not change final URLs stored inside carousel cards.
Creative replacement: create a new ad
Images, videos, headlines, descriptions, logos, CTA text, and carousel creative are replaced by creating a new ad. The existing creative is not mutated in place.- Prepare the complete replacement, not only the field that changed.
- The replacement ad defaults to PAUSED unless you explicitly choose ENABLED.
- The previous ad is paused by default after replacement. Set keep old ad running only when you deliberately want both ads.
- Creative replacement is a multi-step operation. Inspect the returned result and read both ads back; do not assume new-ad creation and old-ad pausing succeeded together.
- For a controlled handoff, create the replacement paused, verify creative and policy state, then enable the new ad and confirm the previous ad is paused.
Example prompt
For customer 123-456-7890, inspect Demand Gen ad 777888999 in ad group 444555666. Prepare a complete paused replacement using the existing business name, logo, destination and unchanged assets, but replace the headline and landscape image with [NEW_HEADLINE] and [NEW_IMAGE_URL]. Show the full replacement payload first. After approval, create it, pause the previous ad, and read both ads back.
Common failures and recovery
- Wrong account or permissions: the connected identity can read the account but cannot write, or the customer ID belongs to another profile.
- Budget rejected: the budget does not exist, is shared, or the amount or period is invalid.
- Goal and bid mismatch: the selected target does not match the campaign goal, or the account lacks the conversion goal needed for YouTube engagements.
- Channel validation: no explicit channel is enabled, a channel name is invalid, or the current Google Ads client does not expose the requested channel.
- Location resolution: a human-readable location is ambiguous or not found. Review resolved locations before creation.
- Audience rejected: the value is not a full Google Ads audience resource name or more than one audience is supplied.
- Creative requirements: business name, logo, required text, image or video assets, final URL, or the minimum carousel-card count is missing.
- Asset or policy failure: an image cannot be fetched, an asset is invalid, or Google Ads rejects the creative or destination. Review any assets already created before retrying.
- CTA failure: enum-style CTA text or an unsupported value is supplied.
- Schedule surprise: REPLACE was used when APPEND was intended.
- Tracking loss: a custom-parameter update omitted existing parameters and replaced the complete set.
- Partial replacement: the new ad and previous-ad status do not match the intended handoff. Read both live ads and repair status explicitly.
Practical workflows
Build without launching
Create a complete Demand Gen campaign for customer [CUSTOMER_ID] in paused state. Stop after each layer and return the new IDs. Do not enable the campaign, ad group, or ads. At the end, list the live campaign settings, effective ad-group channels, targeting, ads, and asset references for review.Change inventory only
For customer [CUSTOMER_ID], inspect Demand Gen ad group [AD_GROUP_ID]. Propose a change to YouTube Shorts and Discover only. Show current and proposed effective channels, wait for approval, apply only the channel change, and read the result back.Change a landing page without replacing creative
For customer [CUSTOMER_ID], inspect Demand Gen ad [AD_ID]. Change only its top-level final URL to [NEW_URL], preserve the ad ID and all creative, and read the final URL and tracking fields back. If the destination is stored in carousel cards, stop and explain that direct update does not cover those URLs.Review before enabling
Review Demand Gen campaign [CAMPAIGN_ID] in customer [CUSTOMER_ID]. Confirm the budget, goal and bidding, dates, devices, geo interpretation, schedule, ad-group channels, locations, language, audience, ad formats, required assets, destinations, and current statuses. Do not enable anything. Return blockers and an approval checklist.Pre-launch checklist
- Campaign goal matches the conversion actions and commercial objective.
- Budget is non-shared and uses the intended daily or custom-period amount.
- Dates, devices, geo interpretation, and schedule are correct.
- Ad-group locations, language, audience, and effective channels are correct.
- Creative format fits the selected inventory, including vertical video for Shorts.
- Every ad includes its required business name, logo, text, media, and destination.
- Replacement ads and previous ads have the intended statuses.
- At least one reviewed, policy-eligible ad is ready in each ad group before enabling the campaign.