Skip to main content
Assets are reusable pieces of ad content — sitelinks, callouts, and structured snippets — that live once in a shared library and attach to your account or individual campaigns by reference. Defining them in one place (conventionally assets.toml) means a single edit updates every ad that uses the asset, and your account root and campaigns only ever refer to assets by a short ID instead of repeating their content.

Full Example

[[assets]]
key = "sl-pricing"
type = "SITELINK"
link_text = "Pricing"
description1 = "Simple per-seat plans"
description2 = "No hidden fees"
final_url = "https://www.example.com/pricing"

[[assets]]
key = "co-soc2"
type = "CALLOUT"
callout_text = "SOC 2 Type II"

[[assets]]
key = "ss-product-types"
type = "STRUCTURED_SNIPPET"
header = "Types"
values = [ "SQL Review", "Data Masking", "Access Control" ]

Referencing Assets

Each asset is attached elsewhere by ID. Attachments are lists of strings in [account] or [[campaigns]] (sitelinks, callouts, structured_snippets) that point back into this library. A reference matches either of two identifiers:
id
string
The Google-issued asset ID. Adjar writes this back automatically after it creates the asset — you normally don’t author it by hand.
key
string
An optional local alias you choose (e.g. "sl-pricing"). Use a key so a brand-new asset — one that has no id yet — can still be referenced from an attachment list and be created and linked in a single apply. Keys must be unique within the library.Keep keys short and descriptive (sl-pricing, co-free-trial, ss-product-types) so both you and your AI agent can reference them unambiguously.
Give every asset a key. Without one, an asset that has not yet been created (no id) cannot be attached, because there is nothing stable to reference it by.
Assets are mutable: editing an asset’s content is an in-place update on the next apply, not a recreate, so the asset keeps its ID and stays attached.

[[assets]] — common fields

Every asset entry carries these, plus the type-specific fields below.
type
string
required
The asset type. Determines which content fields apply.
ValueDescription
"SITELINK"An extra link beneath the ad, with its own URL and optional descriptions
"CALLOUT"A short, non-clickable highlight phrase
"STRUCTURED_SNIPPET"A header plus a list of related values

A sitelink adds a clickable link below your ad, pointing to a specific landing page.
The clickable link text. Maximum 25 characters.
description1
string
Optional first description line shown under the link in some placements. Maximum 35 characters.
description2
string
Optional second description line. Maximum 35 characters. Supply both description lines or neither.
final_url
string
required
The landing page URL the sitelink points to.
[[assets]]
key = "sl-pricing"
type = "SITELINK"
link_text = "Pricing"
description1 = "Simple per-seat plans"
description2 = "No hidden fees"
final_url = "https://www.example.com/pricing"

CALLOUT

A callout is a short phrase that highlights a selling point. Callouts are not clickable.
callout_text
string
required
The callout phrase. Maximum 25 characters.
[[assets]]
key = "co-soc2"
type = "CALLOUT"
callout_text = "SOC 2 Type II"

STRUCTURED_SNIPPET

A structured snippet pairs a predefined header with a list of related values, e.g. Types: SQL Review, Data Masking, Access Control.
header
string
required
The snippet header. Must be one of Google’s predefined values (validated against the account’s language). Adjar accepts the English set:Amenities, Brands, Courses, Degree programs, Destinations, Featured hotels, Insurance coverage, Models, Neighborhoods, Service catalog, Services, Shows, Styles, Types.
Despite some older Google documentation, Features is not an accepted header; use Services or Types instead.
values
array of strings
required
The snippet values. 3–10 values, each a maximum of 25 characters.
[[assets]]
key = "ss-product-types"
type = "STRUCTURED_SNIPPET"
header = "Types"
values = [ "SQL Review", "Data Masking", "Access Control" ]

  • Account Root — attaching assets account-wide
  • Campaigns — attaching assets per campaign and how override vs. inherit resolves