Content Logic is in Beta. Select a project, then open it from Settings > Content Logic.
Why use Content Logic?

Consistency at scale
Define a content pattern once. Apply it to hundreds or thousands of products automatically.
Dynamic content
Use formulas and conditions so content adapts to each product’s attributes, brand, or category.
Channel optimization
Reshape content per channel: truncate for marketplaces, format for your webshop, strip HTML for feeds.
Less manual work
Stop copying and pasting. Let variables and conditions generate the content for you.
Content Logic needs your project to have product families, categories, and product attributes set up. Brand variables map to your product families. Category variables map to your categories.
How variables work
Every variable uses the{{scope.key}} syntax. Type {{ in any formula-enabled field to open the autocomplete dropdown and browse what is available.
The seven scopes
Content Logic groups variables into seven tabs. Each tab shows a count badge when it holds variables, so you can see at a glance which scopes you use.| Tab | Syntax | What it is for |
|---|---|---|
| Defaults | {{product.*}}, {{current.*}} | Built-in variables that resolve from product data |
| Global | {{global.*}} | Shared values that stay the same on every product |
| Brands | {{brand.*}} | Values that differ per brand or product family |
| Categories | {{category.*}} | Values that differ per category |
| Products | {{product.*}} (custom) | Computed values from formulas on product fields |
| Channels | {{channel.*}} | Content reshaped for a specific sales channel |
| Conditional | {{if key}} | Content that changes based on product data |
Default variables
View examples and use cases → The Defaults tab is a read-only list of every built-in variable. They resolve automatically, so you never create them. Your custom product attributes appear here too, referenced as{{attribute.your_attribute_code}}.
Date & time
Date & time
| Variable | Example value |
|---|---|
{{current.year}} | 2026 |
{{current.month}} | February |
{{current.month_number}} | 02 |
{{current.week}} | 8 |
{{current.day}} | 17 |
{{current.day_name}} | Tuesday |
{{current.quarter}} | Q1 |
{{current.season}} | Winter |
{{current.date}} | 2026-02-17 |
Product identity
Product identity
| Variable | Description |
|---|---|
{{product.sku}} | Stock Keeping Unit |
{{product.ean}} | European Article Number (barcode) |
{{product.upc}} | Universal Product Code (12-digit) |
{{product.mpn}} | Manufacturer Part Number |
{{product.brand}} | Brand name |
{{product.supplier}} | Supplier name |
{{product.family}} | Product family |
{{product.category}} | Primary category |
{{product.product_type}} | Simple, Configurable, Virtual, Bundle, Grouped |
Product content
Product content
| Variable | Description |
|---|---|
{{product.name}} | Product name |
{{product.description}} | Full description |
{{product.short_description}} | Short description |
{{product.meta_title}} | SEO title |
{{product.meta_description}} | SEO description |
{{product.meta_keywords}} | SEO keywords |
{{product.main_image}} | Main image URL |
Pricing
Pricing
| Variable | Description |
|---|---|
{{product.price}} | Current selling price |
{{product.special_price}} | Promotional price |
{{product.cost}} | Purchase or cost price |
{{product.savings}} | Price minus special price |
{{product.savings_percent}} | Discount percentage |
{{product.margin}} | Price minus cost |
{{product.margin_percent}} | Margin as percentage of price |
Physical properties
Physical properties
| Variable | Description |
|---|---|
{{product.weight}} | Weight value |
{{product.weight_unit}} | g, kg, oz, or lb |
{{product.length}}, {{product.width}}, {{product.height}} | Dimension values |
{{product.dimension_unit}} | mm, cm, m, in, or ft |
Inventory
Inventory
| Variable | Description |
|---|---|
{{product.stock_quantity}} | Current stock level |
{{product.stock_status}} | in_stock, out_of_stock, or on_backorder |
{{product.low_stock_threshold}} | Low-stock alert threshold |
Shipping & customs
Shipping & customs
| Variable | Description |
|---|---|
{{product.hs_code}} | Harmonized System code |
{{product.country_of_origin}} | ISO country code |
Status & scores
Status & scores
| Variable | Description |
|---|---|
{{product.status}} | active, inactive, pending, or archived |
{{product.completion_score}} | Data completeness percentage |
{{product.quality_score}} | Overall quality score |
Store info
Store info
| Variable | Description |
|---|---|
{{global.name}} | Store or company name |
{{global.url}} | Website URL |
{{global.currency}} | Currency symbol |
{{global.currency_code}} | ISO currency code |
{{global.locale}} | Locale setting |
Global variables
View examples and use cases → Global variables are key-value pairs that stay the same on every product. Use them for company-wide values you reference often.Add a variable
Click Add Variable. Enter a key (letters, numbers, and underscores only) and a value. The value field supports autocomplete. Type
{{ to reference other variables.Common global variables
| Key | Example value | Use case |
|---|---|---|
company_name | ACME Industrial BV | Product descriptions, legal text |
website_url | shop.example.com | CTAs and links |
support_email | support@example.com | Contact information |
return_policy | 30-day return policy, no questions asked. | Product pages, descriptions |
shipping_promise | Free shipping on orders over €50. | Promotional content |
warranty_text | 2-year manufacturer warranty included. | Product specs |
lead_time_text | Ships within 3–5 business days. | B2B ordering info |
moq_default | 1 | Default minimum order quantity |
compliance_general | All products comply with EU regulations. | Legal and compliance footers |
Brand variables
View examples and use cases → Brand variables let you define a set of fields and fill in different values per brand. They map to your product families: each product family is a brand. This is ideal when brands need different messaging, compliance statements, or specifications.Define the fields
On the Brands tab, create the fields you want per brand. Each field has a key, a label, and a type (text, long text, or URL).
Fill in values per brand
Select a brand from the dropdown and fill in the fields. A progress indicator shows how many are done, for example “3/5 filled”.
Field types
| Type | Input | Use case |
|---|---|---|
| Text | Single line | Taglines, short values |
| Long text | Multi-line textarea | Origin stories, compliance text, descriptions |
| URL | URL input with validation | Brand websites, logo URLs |
Example fields
| Key | Label | Type | Brand A value | Brand B value |
|---|---|---|---|---|
tagline | Tagline | Text | Innovation for Life | Built to Last |
origin_story | Origin Story | Long text | Founded in 1985 in Munich… | Family-owned since 1962… |
compliance_text | Compliance | Long text | ISO 9001:2015 certified. REACH compliant. | CE marked. RoHS compliant. UL listed. |
website | Website | URL | https://brand-a.com | https://brand-b.com |
moq | Min. Order Qty | Text | 50 | 100 |
{{brand.tagline}}. A product from Brand B gets “Built to Last”.
Category variables
View examples and use cases → Category variables work like brand variables, but they are scoped to product categories. Define a set of fields, then fill in values per category.Example fields
| Key | Label | Category: Fasteners | Category: Electrical |
|---|---|---|---|
material | Material | Stainless Steel AISI 304 | Copper / PVC |
care_instructions | Care | Store in dry conditions | Keep away from moisture |
short_intro | Short Intro | High-grade fasteners for structural applications. | Electrical components for industrial wiring. |
size_guide_url | Size Guide | /guides/fastener-sizes | /guides/wire-gauges |
{{category.material}}, {{category.care_instructions}}, and so on. Each product gets the values for its primary category.
Product variables (computed)
View examples and use cases → Product variables use formulas to compute new values from existing product data. They recalculate per product.Add a variable
Click Add Variable. Enter a label, key, and formula. Use Insert Field and Insert Operator to build it, or type
{{ for autocomplete.Formula operators
Arithmetic
Arithmetic
| Operator | Description | Example |
|---|---|---|
+ | Add | {{product.price}} + 10 |
- | Subtract | {{product.price}} - {{product.cost}} |
* | Multiply | {{product.price}} * 1.21 |
/ | Divide | {{product.price}} / {{product.stock_quantity}} |
% | Modulo | {{product.stock_quantity}} % 12 |
( ) | Grouping | ({{product.price}} - {{product.cost}}) / {{product.price}} * 100 |
Math functions
Math functions
| Function | Description | Example |
|---|---|---|
round() | Round to nearest integer | round({{product.price}} * 1.21) |
floor() | Round down | floor({{product.margin_percent}}) |
ceil() | Round up | ceil({{product.weight}} / 0.5) * 0.5 |
min(,) | Smaller of two values | min({{product.price}}, 99.99) |
max(,) | Larger of two values | max({{product.cost}} * 1.5, 9.99) |
abs() | Absolute value | abs({{product.price}} - {{product.special_price}}) |
Text functions
Text functions
| Function | Description | Example |
|---|---|---|
concat(,) | Join two values | concat({{product.brand}}, " - ", {{product.name}}) |
uppercase() | Convert to UPPERCASE | uppercase({{product.sku}}) |
lowercase() | Convert to lowercase | lowercase({{product.brand}}) |
Use an operator as text
To show an operator character as literal text, put a backslash in front of it:Example formulas
Price including VAT:- Key:
price_incl_vat - Formula:
round({{product.price}} * 1.21 * 100) / 100 - Result: 120.99 →
€146.40
- Key:
margin_display - Formula:
round(({{product.price}} - {{product.cost}}) / {{product.price}} * 100) - Result:
42%
- Key:
display_name - Formula:
{{product.name}} ({{product.sku}}) - Result:
Stainless Steel Hex Bolt M10x50 (SS-HB-M1050)
- Key:
price_per_kg - Formula:
round({{product.price}} / {{product.weight}} * 100) / 100 - Result:
€15.29/kg
Channel variables
View examples and use cases → Channel variables reshape existing product content for a specific sales channel. Each one takes a source field and applies one or more rules in order.Source fields
Description, Short Description, Product Name, Meta Title, Meta Description, Features.Transformation rules
| Rule | Parameters | What it does |
|---|---|---|
| Truncate | Max length (default: 150) | Cuts text to a maximum character count |
| Strip HTML | None | Removes all HTML tags, leaving plain text |
| Template | Template string | Wraps or reformats content with a template |
| Bullet Points | Max bullets (default: 5) | Turns text into a bullet list |
Example channel variables
Amazon short description:- Source: Description
- Rules: Strip HTML → Bullet Points (max: 5) → Truncate (500)
- Result: Your full HTML description becomes a clean 5-bullet summary, capped at 500 characters.
- Source: Product Name
- Rules: Template (
{{value}} - {{product.brand}} - Buy at {{global.company_name}}) → Truncate (150) - Result: “Stainless Steel Hex Bolt M10x50 - Fischer - Buy at Industrial Supplies BV”
- Source: Description
- Rules: Strip HTML → Truncate (2000)
- Result: Full description with formatting removed, capped at 2000 characters.
Conditional blocks
View examples and use cases → Conditional blocks show different content based on product data. They work like if/else statements for your content.Define conditions
Pick a product field, choose an operator, and enter a value. Add more conditions and combine them with AND or OR.
Condition operators
Conditions can reference any product field, custom attribute, or date/time variable. The field selector groups them by category (Product Identity, Content, Pricing, Physical Properties, Inventory, Shipping, Status, Date & Time) and includes your custom attributes.| Operator | Description | Needs value? |
|---|---|---|
equals | Exact match | Yes |
not_equals | Does not equal | Yes |
contains | Contains substring | Yes |
not_contains | Does not contain | Yes |
starts_with | String starts with | Yes |
ends_with | String ends with | Yes |
greater_than | Numeric greater than | Yes |
less_than | Numeric less than | Yes |
greater_than_or_equal | Greater than or equal | Yes |
less_than_or_equal | Less than or equal | Yes |
in_list | Value is one of (comma-separated) | Yes |
is_empty | Field has no value | No |
is_not_empty | Field has a value | No |
is_true | Boolean is true | No |
is_false | Boolean is false | No |
Example conditional blocks
Free shipping banner:- Key:
free_shipping - IF
product.pricegreater than50→Free shipping included. - ELSE →
Shipping calculated at checkout.
- Key:
stock_message - IF
product.stock_quantityless than5ANDproduct.stock_statusequalsin_stock→Only {{product.stock_quantity}} left, order soon. - ELSE IF
product.stock_statusequalsout_of_stock→Currently out of stock. {{global.restock_text}} - ELSE →
In stock and ready to ship.
- Key:
seasonal_promo - IF
current.seasonequalsWinter→Winter Sale: save {{product.savings_percent}}% today. - ELSE IF
current.seasonequalsSummer→Summer clearance: {{product.savings_percent}}% off. - ELSE → (empty, no promo outside sale seasons)
- Key:
lead_time - IF
product.categoryin_listCustom Orders, Made to Order→Lead time: 4–6 weeks. Contact us for expedited options. - ELSE IF
product.stock_quantitygreater than0→In stock. {{global.lead_time_text}} - ELSE →
Available on backorder. {{global.backorder_lead_time}}
- Key:
hazmat_notice - IF
product.is_dangerous_goodis_true →⚠ Hazardous material. Special shipping restrictions apply. {{brand.hazmat_handling}} - ELSE → (empty)
Where you can use variables
Once defined, you can reference Content Logic variables in:- Bulk editing: use variables in Find and Replace, Append/Prepend, and Set Field Value to generate content at scale
- AI enrichment prompts: add product context, brand guidelines, and category instructions to your prompts
- Export templates: format output for different channels and platforms
- Automations: reference variables in actions that generate or change content
Save your changes
Content Logic detects when you make a change. A save bar appears at the bottom of the page:- Click Save to keep your changes.
- Click Undo to revert to the last saved state.
Best practices
Start with Globals
Begin with global variables for shared values like company name, shipping policy, and contact info. They are quick to set up and useful right away.
Use descriptive keys
Name variables clearly:
warranty_text, not var1. You reference these keys everywhere, so keep them readable.Test with real products
After you create a block or formula, check it against different products. Use the live preview to catch issues early.
Layer your scopes
Combine scopes in one formula: globals for shared text, brand variables for manufacturer details, category variables for product-type details.
Related
Bulk editing
Apply variables across many products at once with bulk actions.
Enriching products
Inject variables into AI prompts for richer, on-brand content.
Export templates
Format channel-ready output using your Content Logic variables.
Automations
Reference variables in automated actions that generate content.


