Custom Text Formatting in Matching Column (Step 2)
Custom text formatting allows you to prepend or append static strings, inject HTML markup, apply Liquid template logic, and transform data values dynamically in your field mapping.
How to Set Up Custom Text Formatting
Go to App → Feed Settings → Step 2: Matching Column
- Locate Target Field: Find the store field you want to customize (e.g., Description, Title, SKU, Metafield, Weight).
- Edit Tag Value: Double-click the mapped column tag to enter edit mode.
- Insert Custom Syntax: Enter your custom static text, unit suffix (e.g., appending
mm), HTML tags, or Liquid expressions alongside or in place of the column tag. - Save Mapping: Click outside the field or press Enter to confirm your changes.
data.Title). For CSV and XLSX files, use zero-based column indexes (e.g., data[0]).Custom Text Formatting Examples & Rules
1. Add Custom Text Alongside Column Field Name
Custom text can be added to the mapping section alongside the column field name. Double-click the tag to edit it directly.

Example in Description Field:

<p>{{data.Description}}</p><p>Ingredient: {{data.ingredient}}</p><p>Weight: {{data.weight}}(ml)</p>
2. Append Static Unit Suffixes (e.g., Adding "mm" to XML Numeric Values)
When an XML feed file contains raw numeric dimensions (e.g., 25) without a measurement unit, you can append a static suffix directly beside the field tag or by using the Liquid append filter.
Method A: Direct Static Text (Recommended)
Double-click the mapped field tag and type the unit directly after the closing brackets:
{{data.dimension}} mmMethod B: Liquid Append Filter
{{ data.dimension | append: " mm" }}25, both methods output 25 mm in your store.3. Include HTML Links in Description
Use custom text formatting to wrap mapped values into clickable HTML hyperlinks.

<a href="{{data.Description}}" target="_blank">{{data.Description}}</a>
4. Format XML Node as a Table
Extract repeated XML child nodes and format them into an HTML table inside the store description.
Example of XML file node:

Map this in Description field:

<div>{{data.description}}</div>
<table>
<tr>
<td>{{data.features.feature[1].name}}</td>
<td>{{data.features.feature[1].value}}</td>
</tr>
<tr>
<td>{{data.features.feature[2].name}}</td>
<td>{{data.features.feature[2].value}}</td>
</tr>
<tr>
<td>{{data.features.feature[3].name}}</td>
<td>{{data.features.feature[3].value}}</td>
</tr>
<tr>
<td>{{data.features.feature[4].name}}</td>
<td>{{data.features.feature[4].value}}</td>
</tr>
<tr>
<td>{{data.features.feature[5].name}}</td>
<td>{{data.features.feature[5].value}}</td>
</tr>
</table>
Result in Online Store:

5. Format Description as Bullet Points
Combine individual feed attributes into an unordered HTML list.
Example of file:

Map this in Description field:

<ul>
<li>Length: {{data.Length}}cm</li>
<li>Weight: {{data.Weight}}kg</li>
<li>Height: {{data.Height}}cm</li>
</ul>
6. Enclose Custom Text Containing Commas in Quotation Marks
If your custom text contains commas, wrap the text in double quotation marks "" so the commas are not treated as field separators.

7. Retain Existing Store Value if Feed Value is Empty (Shopify Only)
Only supported in Shopify stores. If the Shopify store description is empty, it will update with the feed value; otherwise, the existing store description is retained.
{{ product.descriptionHtml | default: data.desc }}
8. Create Dynamic Date and Time Formatting in Metafield (Shopify Only)
Only supported in Shopify stores. Generate dynamic date and time formatting in Metafields (custom data) using feed file values.
{{ data[2] | add_day_to_date: "%d.%m.%y %H:%M", data[1] }}
9. Combine Shopify Product Attributes with Feed Data (Shopify Only)
Create dynamic mappings by combining existing Shopify product attributes with data from your feed file.
Shopify ID: {{product.id}} - Description: {{data[2]}}
10. Map XML File with Custom Liquid Formatting
Traverse nested XML nodes using standard dot notation.
{{data.UrunSecenek.Secenek.Barkod}}11. Handle Column Names Containing Spaces
When referencing JSON or XML column names with spaces, use square brackets and quotes data["Product Title"] instead of dot notation.
{{ data["Product Title"] }}12. Remove Specific Characters from Field
Remove unwanted characters (such as asterisks *) from any field value using the remove filter.
{{ data[1] | remove: "*" }}
13. Remove Characters and Extract Unique Text from Two Columns
Remove special characters, prepend values from another column, split strings, and extract only unique terms.
{{ data["sProductDescr"] | remove: "*" | prepend: " " | prepend: data["MotherBrand"] | split: " " | uniq | join: " " }}
14. Remove Spaces Within Link Strings
Fix malformed file URLs by replacing stray whitespace characters before quotes or protocol headers.
{{ data[7] | replace: '.pdf "', '.pdf" ' | replace: '" http', '"http' }}
15. Remove Prefix and Extra Spaces from SKU
Strip a specific prefix (e.g., "ABC") and trim all outer spaces from the SKU string.
{{ data[0] | remove: "ABC" | strip }}
16. Add Postfix to the End of Image URLs
Loop through comma-separated image URLs, strip spaces, and append dimensions or custom query parameters to each image URL.
{% assign images = data[2] | split: ',' %}{% for image in images %}{% assign clean_image = image | strip %}{% assign modified_image = clean_image | append: '?height=1100&width=1100' %}{{ modified_image }}{% unless forloop.last %},{% endunless %}{% endfor %}
17. Extract Initial Value in Delimited Variant Strings
When variant values contain delimited strings (e.g., IHL1365-BK-S0), split by the hyphen (dash) - and use first to return only the initial code. The split operation separates the string into multiple components (e.g., IHL1365, BK, and S0), and first extracts the first element.
{{ data[2] | split: "-" | first }}
18. Display Availability Status as "Yes" or "No"
Evaluate whether a date or inventory column contains a value and output binary availability text.
{% if data[3] == blank %} No {% else %} Yes {% endif %}
19. Conditional Price Fallback Logic
Check if a special promotional price is blank or empty. If blank, fallback to indicative retail; otherwise, apply the special price.
{% if data['Factory Special RETAIL (incl GST)'] == blank or data['Factory Special RETAIL (incl GST)'] == '' %}{{ data['Indicative RETAIL (incl GST)'] }}{% else %}{{ data['Factory Special RETAIL (incl GST)'] }}{% endif %}
20. Remove Whitespace Gaps Between SKU Numbers
Use regular expression substitution gsub to identify multiple whitespace blocks \s+ and standardize them into single spaces.
{{ data.SKU | gsub: "\s+", " " }}
21. Replace Specific Terms in Feed Data
Replace specific keywords across your feed values (e.g., changing 'product' to 'item').
{{ data[1] | replace: 'product', 'item' }}
22. Apply Conditional Price Calculations and Markups
Perform mathematical price adjustments dynamically based on numeric threshold conditions.
Extract Prices: Obtain "Reseller Price Ex GST" and "RRP (inc GST)" using:{% assign price = data['Reseller Price Ex GST'] | plus: 0 %} {% assign rrp_price = data['RRP (inc GST)'] | plus: 0 %}
Set Base Price: Initialize the final price with the reseller price:{% assign final_price = price %}
Apply Markup: Adjust the final price based on the following conditions:{% if price > 51 %} {% assign final_price = price | times: 1.1 | times: 1.1 %} {% elsif price < 50 %} {% assign final_price = price | times: 1.1 | times: 1.1 | plus: 2 %} {% endif %}

23. Strip Leading and Trailing Whitespace
Remove tabs, spaces, and line breaks from both ends of a string without altering spacing between words.
{{ data.kod | strip }}
24. Encode Spaces in Image URLs
Replace literal spaces inside media link paths with %20 for standard URL encoding.
{{ data[1] | replace: ' ', '%20' }}
25. Round Down to Nearest Integer
Use the floor filter to round decimal numbers or stock values down to the nearest whole integer.
{{ data['Quantity'] | floor }}
26. Parse Delimited Text into an HTML List
Split a string delimited by asterisks *, trim whitespaces, and build an unordered list.
{% assign items = data[1] | split: "*" %}
<ul>
{% for item in items %}
{% assign cleaned_item = item | strip %}
{% unless cleaned_item == blank %}
<li>{{ cleaned_item }}</li>
{% endunless %}
{% endfor %}
</ul>
27. Strip Decimals and Leading Zeros from Barcodes
Clean feed barcode values by removing .0 decimals, trimming spaces, and stripping leading zeros.
{{ data['Item No. EAN'] | replace: '.0', '' | strip | gsub: '^0+', '' }}
28. Remove Leading Zeros via Prefix Technique
An alternative string method to strip leading zeros by prepending a sentinel character.
{{ data['Item No. EAN'] | prepend: 'X' | remove_first: 'X0' | remove_first: 'X' }}
29. Multi-Column Fallback Hierarchy
Set up a chained fallback sequence: use column 3 if populated; otherwise use column 2; if also empty, use column 1.
{{ data[3] | default: data[2] | default: data[1] }}
30. Replace Multiple Substrings
Chain multiple replace filters together to normalize abbreviations or titles.
{{ data.name | replace: "w/", "with" | replace: "W/", "with" }}

31. Control Inventory Policy Based on Quantity Thresholds
Set Shopify inventory sell-out behavior based on available quantities (1 = Continue selling, 0 = Deny purchases):
stock_status > 2→ Continue selling (1)stock_status <= 2→ Disable continue selling (0)
{% assign stock_status = data[3] | plus: 0 %}
{% if stock_status > 2 %}{{ 1 }}{% else %}{{ 0 }}{% endif %}
32. Filter Warehouse Array with JMESPath
Filter complex warehouse arrays by ID. If inventory is 0 and no incoming stock lines exist, output deny; otherwise, output continue.
{% assign warehouse = data | jmespath: 'Warehouses.Warehouse[?Id == SYD-AV] | [0]' %}
{% if warehouse.Inventory | times: 1 == 0 and warehouse.UpcomingStockLines == blank %}deny{% else %}continue{% endif %}
33. Build Bullet Points from Nested XML Attribute Arrays
Loop through multi-dimensional elements to display attributes on separate lines inside an HTML list.
<ul>
{% for inner_array in data.AttrList.element %}
{% for attribute in inner_array %}
<li><strong>{{ attribute.Name }}:</strong> {{ attribute.Value }}</li>
{% endfor %}
{% endfor %}
</ul>
34. Reformat Date and Timestamp Strings
Transform incoming feed date formats into your store's required date layout.
Syntax:
{{ value | format_date: "<input_format>", "<output_format>" }}- Value: The date string to convert.
- input_format: How the date is formatted in the feed file.
- output_format: Desired destination format.
M represents Month, whereas m represents minute.Token | Description | Example |
|---|---|---|
| Day of the month (1-31) | 4 |
| Day with leading zero (01-31) | 04 |
| Abbreviated day of the week | Tue |
| Full day of the week | Tuesday |
| Month (1-12) | 4 |
| Month with leading zero (01-12) | 04 |
| Abbreviated month name | Sep |
| Full month name | September |
| Year without century (no padding) | 4 |
| Year without century with leading zero | 04 |
| Full numeric four-digit year | 2004 |
| Hour, 12-hour clock (1-12) | 2 |
| Hour, 12-hour clock with leading zero (01-12) | 02 |
| Hour, 24-hour clock (0-23) | 14 |
| Hour, 24-hour clock with leading zero (00-23) | 14 |
| Minute (0-59) | 5 |
| Minute with leading zero (00-59) | 05 |
| Second (0-59) | 9 |
| Second with leading zero (00-59) | 09 |
| AM/PM designator | PM |
Examples:
- Reorder Structure:
{{ "05/03/2026" | format_date: "dd/MM/yyyy", "yyyy-MM-dd" }}→2026-03-05 - Long-Form Conversion:
{{ "2026-05-05 14:30" | format_date: "yyyy-MM-dd HH:mm", "hh:mm tt 'on' dddd" }}→02:30 PM on Tuesday - Direct Feed Data:
{{ data.published | format_date: "dd-MMM-yy", "yyyy-MM-dd" }}

35. Capitalize First Character of a String
Capitalizes the first character and converts all remaining letters to lowercase.
- Input:
{{ "my GREAT title" | capitalize }} - Output:
My great title
36. Convert String to Lowercase
Converts all characters in the string to lowercase letters.
- Input:
{{ "Parker Moore" | downcase }} - Output:
parker moore
37. Convert String to Uppercase
Converts all characters in the string to uppercase letters.
- Input:
{{ "Parker Moore" | upcase }} - Output:
PARKER MOORE
38. Clear Compare-At Price When Value is Zero
When feed pricing is 0, passing an empty array [] tells the system to reset or clear the compare-at price in your store instead of assigning zero.
{% assign price = data.original_price | times: 1.0 %}{% if price == 0.0 %}[]{% else %}{{ data.original_price }}{% endif %}
39. Extract Date Substring Before ISO Timestamp 'T'
Strip timestamps off ISO date-time strings by splitting on the character T.
{{ data.expected_delivery_date | split: "T" | first }}
Field Compatibility for Custom Formatting
Custom formatting can be applied across the following platforms and fields:
Shopify | WooCommerce | BigCommerce | Wix |
|---|---|---|---|
✔️ Description | ✔️ Tag | ||
✔️ Vendor | ✔️ Weight | ✔️ Weight | ✔️ Weight |
✔️ Title | ✔️ Description | ✔️ Description | ✔️ Description |
✔️ SKU | ✔️ Vendor | ✔️ Title | |
✔️ Stock Status | ✔️ Title | ✔️ Ribbon | |
✔️ Title | ✔️ Custom Field | ✔️ Brand | |
✔️ Barcode | ✔️ MPN | ✔️ Collection | |
✔️ Metadata | ✔️ Bin Picking Number | ||
✔️ Metafield | ✔️ Width | ||
✔️ Height | ✔️ Brand | ||
✔️ Product Type | ✔️ Length | ✔️ Category | |
✔️ Publish | ✔️ Category | ||
✔️ SKU | |||
✔️ Tags | ✔️ Preorder Message | ||
✔️ Taxable | ✔️ Preorder Date | ||
✔️ Weight | ✔️ Barcode | ||
✔️ URL & Handle | |||
✔️ Product URL | |||
✔️ Status | |||
Key Rules & Technical Details
- Column Reference Syntax: CSV and XLSX files use zero-based column indexes (e.g.,
data[0],data[1]). JSON and XML files use column tag names (e.g.,data["Product Title"]ordata.Title). - Commas in Text: Always wrap custom text containing commas in double quotation marks
""to avoid delimiter parsing errors. - Shopify Dynamic Context: Objects such as
product.idandproduct.descriptionHtmlare supported exclusively for Shopify store connections. - Liquid Evaluation: When curly brackets (
{{ }}or{% %}) are introduced into a mapping field, default dropdown label pickers are disabled in favor of raw Liquid evaluation.
Troubleshooting Steps
- Issue: Liquid code displays literally in store fields → Solution: Check that all curly brackets
{{ }}and tags{% %}are properly closed and do not contain broken characters or unbalanced quotes. - Issue: Column name with spaces returns blank data → Solution: Use bracket notation
data["Column Name"]instead of dot notationdata.Column Name. - Issue: CSV column index outputs unexpected data → Solution: Recheck your index numbers. CSV indexes start at 0, meaning column A is
data[0]and column B isdata[1].
Good Articles to Continue
- How to Update Metafield Date Content Type in Shopify → Learn how to properly format and map dynamic date fields to Shopify Metafields.
Updated on: 27/10/2026
Thank you!
