google/campaigns/ directory (or wherever your account root points via imports). A single file can contain multiple [[campaigns]] entries. Adjar reads these files to understand your current campaign setup and writes changes back in the same format — making your entire campaign structure readable and editable by both humans and AI agents.
Full Example
[[campaigns]] Fields
string
required
The display name of the campaign as it appears in Google Ads. Names must be unique within the account.A clear naming convention helps AI agents identify campaigns without ambiguity. A common pattern is:
string
required
Controls whether the campaign is actively serving ads.
ENABLED and PAUSED are the only values you set in config. To remove a campaign, delete its block from TOML — the next apply archives the live campaign. (Internally Adjar writes Google’s REMOVED state during that archive; it is never something you author.)string
required
The Google Ads channel this campaign runs on.Additional channel types (e.g.
DISPLAY, PERFORMANCE_MAX) will be documented as Adjar adds support for them.string
required
The automated bidding strategy Google uses to set bids for this campaign.Only the strategy kind is modeled here.
TARGET_CPA / TARGET_ROAS targets, and the conversion tracking the conversion-driven strategies require, are configured in the Google Ads UI — switching to one in TOML seeds an empty target that Google may reject until you set it (apply’s server-side validation will surface this).number
An optional maximum cost-per-click cap in US dollars applied on top of the automated bid strategy. Google will not bid above this amount for any single click.Only valid when
bid_strategy is "TARGET_SPEND".number
required
The average daily spend limit for this campaign in US dollars. Google may spend up to twice this amount on a given day, but will not exceed the monthly equivalent (daily × 30.4) over a calendar month.
string
default:"STANDARD"
How the daily budget is paced.
string
The date the campaign begins serving,
YYYY-MM-DD. Omit to let Google use the campaign’s existing/created start date.string
The date the campaign stops serving,
YYYY-MM-DD. Omit for an open-ended campaign — Adjar leaves the end date unset rather than writing a phantom value.array of strings
A list of sitelink asset IDs to attach at the campaign level. These IDs must be defined in your
assets.toml.Attachment resolves at the most specific level — Google never merges. Omitting the field (or setting it empty) inherits the account-level sitelinks; a non-empty list replaces the account set for this campaign. To keep an account-wide sitelink showing on a campaign that adds its own, re-list its ID here.array of strings
Campaign-level callout asset IDs, with the same inherit-or-override semantics as
sitelinks.array of strings
Campaign-level structured-snippet asset IDs, with the same inherit-or-override semantics as
sitelinks.[campaigns.network]
Controls which networks the campaign serves on — Google’s network_settings. All fields default to a Google-Search-only campaign, so omitting the block keeps the campaign off Search partners and the Display Network. This is deliberate: Display spend inside a Search campaign produces no search terms and is easy to miss. The block is always compared against the live campaign, so a Display opt-in flipped on in the UI shows up as drift on the next plan.
boolean
default:"true"
Serve on the main Google Search results pages.
search_partners requires this to be true.boolean
default:"false"
Also serve on Google’s Search-partner sites.
boolean
default:"false"
Also serve on the Display (“Content”) Network.
[campaigns.targeting]
The [campaigns.targeting] table controls who sees ads from this campaign. All fields are optional — omitting a field leaves that dimension unrestricted.
array of strings
List of country codes (ISO 3166-1 alpha-2) to target. Ads will only be eligible to show to users in these locations.Adjar maps each code to Google’s numeric geo-target constant from a built-in whitelist. Currently supported:
US, CA, GB, DE, FR, NL, AU, JP, IN, SG. An unrecognised code is rejected — extend the map in the CLI to add a new market.array of strings
List of language codes to target. Ads will only show on Google properties using one of these languages.As with geos, codes map to Google’s numeric language constants from a built-in whitelist. Currently supported:
en, de, fr, es, ja, zh. An unrecognised code is rejected.array of strings
List of device types to target. Ads will only be eligible to serve on the specified devices.
[[campaigns.negative_keywords]]
Campaign-level negative keywords prevent ads in this campaign from showing on searches that match. They apply to every ad group within the campaign.
string
required
The keyword text to exclude. Do not include match type syntax characters (e.g. quotes or brackets) — use the
match_type field instead.string
required
How broadly the negative keyword blocks traffic.See the Keywords reference for a full explanation of match type behaviour, including ad-group-level negatives.
[[campaigns.ad_groups]]
Ad groups sit inside a campaign and contain keywords and ads. Each [[campaigns.ad_groups]] entry must appear after the [[campaigns]] entry it belongs to.
string
required
The display name of the ad group as it appears in Google Ads. Names must be unique within the parent campaign.A clear name reflects the keyword theme the ad group targets, making it easy for both humans and AI agents to identify which ad group to edit.
string
required
Controls whether the ad group is eligible to serve ads.As with campaigns,
ENABLED and PAUSED are the only values you set; remove the ad-group block to archive it.number
The ad group’s default maximum cost-per-click bid in US dollars. Used when the campaign’s
bid_strategy is "MANUAL_CPC"; automated strategies set bids at the campaign level and ignore this.[[campaigns.ad_groups.keywords]] and [[campaigns.ad_groups.ads]]. See Keywords and Creatives for those fields.
Related Pages
- Account Root — how campaigns are imported via
google.toml - Keywords — keyword entries, match types, and negatives at the ad group level
- Creatives — ads, headlines, and descriptions nested inside ad groups
- Assets — the sitelinks, callouts, and structured snippets that campaign attachments reference
- Conversions — the conversion actions that conversion-based
bid_strategyvalues feed