Content Logic is currently in Beta. You can access it from Settings > Content Logic after selecting a project.
Why use Content Logic?
Consistency at Scale
Define content patterns once and apply them to hundreds or thousands of products automatically.
Dynamic Content
Use formulas and conditions to generate content that adapts based on product attributes, brand, or category.
Channel Optimization
Transform content for different sales channels — truncate for marketplaces, format for your webshop, strip HTML for feeds.
Reduce Manual Work
Eliminate repetitive copy-paste work by letting variables and conditions handle content generation.
Variable syntax
All variables use the{{scope.key}} syntax. Type {{ in any formula-enabled field to open the autocomplete dropdown and browse available variables.
Variable scopes
Content Logic organizes variables into seven tabs, each serving a different purpose:| Tab | Syntax | Purpose |
|---|---|---|
| Defaults | {{product.*}}, {{current.*}} | Built-in variables that resolve automatically from product data |
| Global | {{global.*}} | Shared values that stay the same across all products |
| Brands | {{brand.*}} | Values that differ per brand / product family |
| Categories | {{category.*}} | Values that differ per category |
| Products | {{product.*}} (custom) | Computed variables using formulas on product fields |
| Channels | {{channel.*}} | Content transformations for specific sales channels |
| Conditional | {{if key}} | Different content based on product data conditions |
Content Logic requires your project to have product families, categories, and product attributes configured. Brand variables map to your product families, and category variables map to your categories.
Default variables
View examples and use cases → The Defaults tab is a read-only reference of every built-in variable available to you. These resolve automatically — you don’t need to create them.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
| 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
| 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
| Variable | Description |
|---|---|
{{product.price}} | Current selling price |
{{product.special_price}} | Promotional price |
{{product.cost}} | Purchase / 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
| 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
| 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
| Variable | Description |
|---|---|
{{product.hs_code}} | Harmonized System code |
{{product.country_of_origin}} | ISO country code |
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
| Variable | Description |
|---|---|
{{global.name}} | Store / company name |
{{global.url}} | Website URL |
{{global.currency}} | Currency symbol |
{{global.currency_code}} | ISO currency code |
{{global.locale}} | Locale setting |
{{attribute.your_attribute_code}}.
Global variables
View examples and use cases → Global variables are key-value pairs that stay the same across all products. Use them for company-wide values you reference often.Add a variable
Click Add Variable. Enter a key (alphanumeric and underscores only) and a value. The value field supports formula 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/compliance footers |
Brand variables
View examples and use cases → Brand variables let you define a schema 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 different brands need different messaging, compliance statements, or specifications.Define the schema
On the Brands tab, create fields for the data you want per brand. Each field has a key, label, and 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 fields are completed (e.g., “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 schema
| 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}}, while a product from Brand B gets “Built to Last”.
Category variables
View examples and use cases → Category variables work the same way as brand variables but are scoped to product categories. Define a schema, then fill in values per category.Example schema
| 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}}, etc. Each product gets the values matching 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 the Insert Field and Insert Operator buttons to build your formula, or type
{{ for autocomplete.Formula operators
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
| 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
| 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}}) |
Escaping operators
To use an operator character as literal text (not as a math operator), prefix it with a backslash:Example product variables
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 transform existing product content for specific sales channels. Each variable takes a source field and applies one or more transformation rules in sequence.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 | — | Removes all HTML tags, leaving plain text |
| Template | Template string | Wraps or reformats content using a template |
| Bullet Points | Max bullets (default: 5) | Converts text into a bullet-point 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, max-500-char summary for Amazon.
- 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 all formatting stripped, 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
Select a product field, choose an operator, and enter a comparison value. Add multiple conditions and combine them with AND or OR logic.
Condition operators
| 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 dynamic content at scale
- AI enrichment prompts — Inject product context, brand guidelines, and category-specific instructions into your prompts
- Export templates — Format output dynamically for different channels and platforms
- Automations — Reference variables in automation actions that generate or modify content
Saving changes
Content Logic auto-detects when you’ve made changes. A save bar appears at the bottom of the page:- Click Save to persist your changes
- Click Undo to revert to the last saved state
Best practices
Start with Globals
Begin with global variables for company-wide values like company name, shipping policy, and contact info. They’re the simplest to set up and immediately useful across your catalog.
Use Descriptive Keys
Name variables clearly —
warranty_text instead of var1, compliance_text instead of ct. You’ll reference these keys everywhere, so make them readable.Test with Real Products
After creating conditional blocks or formulas, verify them against different products to make sure the right content appears for each scenario. Use the live preview to catch issues early.
Layer Your Scopes
Combine scopes for rich content — use global variables for shared text, brand variables for manufacturer-specific content, and category variables for product-type details, all in one formula.

