Using AI values in a feed
A profile generates the values. Now the feed has to pick them up - and this is usually the step people brace for, expecting to rebuild templates they spent a day getting right.
You do not have to. There are two routes, they work together, and the first one involves ticking a checkbox.
Route 1: tick a box, change nothing else
On the profile form, tick a feed under Apply to feeds. That is it.
From then on, in that feed only, wherever the feed already uses the profile's target attribute, the optimized value takes the place of the catalog one. That covers both ways a feed can reference an attribute:
- a CSV or TXT column mapped to that attribute;
- an inline
{{ product.<attribute> }}reference in an XML or CSV template.
The feed itself needs no editing. A feed built from the Google Shopping template keeps its {{ product.name }} reference exactly as it is; assigning a title profile just changes what that reference resolves to. Untick the box and it resolves to the catalog value again, instantly.
Products the profile has not reached yet keep the catalog value, so assign the feed straight away - you do not have to wait for the profile to finish.
The attribute code is matched whole. A profile targeting color substitutes {{ product.color }} but never {{ product.color:swatch }} or {{ product.color_group }}.
Limits of assignment
- One active profile per attribute per feed. Assigning a second profile for the same attribute on the same feed is refused at save, with a message naming the profile already there.
- Enrichment substitutes its target attribute only. A profile filling
color,sizeandmaterialsubstitutes only its target. The other outputs reach a feed through their own tokens, described below. If an enrichment profile's target is not among the attributes it fills, it cannot be assigned to feeds at all - an assigned feed would have nothing to substitute.
Route 2: name the value explicitly
Assignment covers the common case. Tokens cover everything else - the same optimized title in one feed and the raw one in another, or a field your catalog does not even have.
Any feed, assigned or not, can name a profile's output directly.
| Profile kind | Token |
|---|---|
| Text rewrite | ai:<code> |
| Category mapping | ai:<code> |
| Attribute enrichment | ai:<code>_<attribute>, one per declared output |
An enrichment profile has no bare ai:<code> form. A profile coded apparel that fills color, size and material is read as ai:apparel_color, ai:apparel_size and ai:apparel_material.
Use a token in either place a feed accepts an attribute:
- as the attribute of a CSV or TXT column;
- inline in a template:
{{ product.ai:title_google }}.
The profile's coverage bar lists the exact tokens for that profile, under How feeds read this profile → Any feed.
In the attribute picker
Tokens also appear in the feed content editor's attribute list, in the group 10. AI Attributes. Each entry is labelled AI Attribute: <profile name>, or AI Attribute: <profile name> - <attribute> for an enrichment output. A disabled profile is still listed, marked (disabled).
Which route to use
| Use assignment when | Use a token when |
|---|---|
| The feed already emits the attribute and you want the optimized value in its place. | The generated field has no catalog attribute at all, such as key_features. |
| You do not want to touch a working feed template. | You want the optimized value in one feed and the raw value in another, side by side. |
| One profile serves several feeds identically. | You need more than one of an enrichment profile's outputs. |
Nothing can break your feed
This is worth stating plainly, because it is what lets you enable AI optimization on a feed that is currently earning money.
There is always a value. When a feed reads an AI value and there is nothing stored - the profile has not reached that product yet, the value came back empty, the last run failed - the feed emits the product's own value of the attribute the token names. Exactly what it emits today. A half-finished profile still produces a completely valid feed.
That fallback goes through normal feed resolution, so a synthetic code still works: ai:category_google on a category-mapping profile falls back to your manual mapping's own value.
Export never calls a model. Feed generation only reads what the background process already stored. Which means:
- generate a feed at any moment, whatever state the optimization is in;
- an AI provider outage cannot break, delay or corrupt an export;
- adding AI optimization does not cost you a single second of generation time.
Validation on feed save
Saving a feed whose content references a token that cannot be resolved is refused:
Unknown AI attribute reference(s): token. No AI profile exists yet, so nothing can be referenced as
ai:<...>- create one under AI optimization first.
or, when profiles do exist:
Unknown AI attribute reference(s): token. This feed can use: list. A profile that fills several attributes is read as
ai:<code>_<attribute>, one token per attribute - its code alone is not a reference.
The second message is the common one: it usually means an enrichment profile was referenced by its bare code.
A warning you may see after saving a profile
If a profile fills an attribute that none of its assigned feeds actually uses, saving succeeds but warns:
This profile fills "attribute", but these feeds do not use it anywhere: feeds. Their category output will not change. Point the profile at the category mapping the feed actually emits, or add
{{ product.<attribute> }}to the feed content.
Nothing is broken - the values are still generated and still readable by token. The warning only means those feeds will not change until you either repoint the profile or reference the value in the feed content.