Articles on: Shopify

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.


Available on: ✔️ Add | ✔️ Update | ✔️ Export



How to Set Up Custom Text Formatting


Go to App → Feed Settings → Step 2: Matching Column


  1. Locate Target Field: Find the store field you want to customize (e.g., Description, Title, SKU, Metafield, Weight).
  2. Edit Tag Value: Double-click the mapped column tag to enter edit mode.
  3. 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.
  4. Save Mapping: Click outside the field or press Enter to confirm your changes.


Once curly brackets and commas are used in the mapping section, dropdown labels will no longer be supported.


For custom Liquid formatting, use JSON or XML column names (e.g., 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.


Custom text edit


Example in Description Field:


Description field custom text


<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}} mm


Method B: Liquid Append Filter

{{ data.dimension | append: " mm" }}


If the manufacturer XML file provides 25, both methods output 25 mm in your store.



Use custom text formatting to wrap mapped values into clickable HTML hyperlinks.


Description field HTML link


<a href="{{data.Description}}" target="_blank">{{data.Description}}</a>


All mapped description values will become clickable links in your store.



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:

XML file node example


Map this in Description field:

Description field table mapping


<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:

Table result in store



5. Format Description as Bullet Points

Combine individual feed attributes into an unordered HTML list.


Example of file:

Feed file example


Map this in Description field:

Description bullet format mapping


<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.


Quotation marks example



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 }}


Retain existing description



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.


For full configuration details, refer to the Dynamic Date Values Guide.


{{ data[2] | add_day_to_date: "%d.%m.%y %H:%M", data[1] }}


Dynamic date formatting



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]}}


Combine Shopify product attributes



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: "*" }}


Remove specific characters



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: " " }}


Remove and extract unique text



Fix malformed file URLs by replacing stray whitespace characters before quotes or protocol headers.


{{ data[7] | replace: '.pdf "', '.pdf" ' | replace: '" http', '"http' }}


Remove spaces within links



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 }}


Remove prefix from SKU



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 %}


Add postfix to image URL



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 }}


Extract first value



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 %}


Display availability status



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 %}


Conditional price fallback



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+", " " }}


Remove SKU gap



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' }}


Replace text



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 %}


Conditional markup calculation



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 }}


Strip whitespace



24. Encode Spaces in Image URLs

Replace literal spaces inside media link paths with %20 for standard URL encoding.


{{ data[1] | replace: ' ', '%20' }}


URL spaces encoding



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 }}


Round down with 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>


Parse delimited text into list



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+', '' }}


Clean barcode decimals and zeros



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' }}


Remove leading zeros alternate



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] }}


Multi-column fallback



30. Replace Multiple Substrings

Chain multiple replace filters together to normalize abbreviations or titles.


{{ data.name | replace: "w/", "with" | replace: "W/", "with" }}


Replace multiple substrings



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 %}


Control inventory policy



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 %}


JMESPath warehouse query



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>


Nested XML attribute loop



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.


Note: Date tokens are case-sensitive. M represents Month, whereas m represents minute.


Token

Description

Example

d

Day of the month (1-31)

4

dd

Day with leading zero (01-31)

04

ddd

Abbreviated day of the week

Tue

dddd

Full day of the week

Tuesday

M

Month (1-12)

4

MM

Month with leading zero (01-12)

04

MMM

Abbreviated month name

Sep

MMMM

Full month name

September

y

Year without century (no padding)

4

yy

Year without century with leading zero

04

yyyy

Full numeric four-digit year

2004

h

Hour, 12-hour clock (1-12)

2

hh

Hour, 12-hour clock with leading zero (01-12)

02

H

Hour, 24-hour clock (0-23)

14

HH

Hour, 24-hour clock with leading zero (00-23)

14

m

Minute (0-59)

5

mm

Minute with leading zero (00-59)

05

s

Second (0-59)

9

ss

Second with leading zero (00-59)

09

tt

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" }}


Date formatting setup



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 %}


Clear compare at price



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 }}


Extract date string



Field Compatibility for Custom Formatting


Custom formatting can be applied across the following platforms and fields:


Shopify

WooCommerce

BigCommerce

Wix

✔️ Description

✔️ Tag

✔️ Product Image

✔️ Product Image

✔️ Vendor

✔️ Weight

✔️ Weight

✔️ Weight

✔️ Title

✔️ Description

✔️ Description

✔️ Description

✔️ SKU

✔️ Product Image

✔️ Vendor

✔️ Title

✔️ SEO Page Title

✔️ Stock Status

✔️ Title

✔️ Ribbon

✔️ SEO Meta Description

✔️ Title

✔️ Custom Field

✔️ Brand

✔️ Barcode

✔️ Variant Option

✔️ MPN

✔️ Collection

✔️ Inventory Policy

✔️ Metadata

✔️ Bin Picking Number

✔️ Variant Option

✔️ Metafield

✔️ Width

✔️ Variant Option


✔️ Product Category

✔️ Height

✔️ Brand


✔️ Product Type

✔️ Length

✔️ Category


✔️ Publish

✔️ Category

✔️ Availability Description


✔️ Shipping (Physical)

✔️ Product Attribute

✔️ SKU


✔️ Tags


✔️ Preorder Message


✔️ Taxable


✔️ Preorder Date


✔️ Theme template


✔️ Purchasability


✔️ Weight


✔️ Barcode


✔️ URL & Handle




✔️ Product URL




✔️ Status




✔️ Product Image




✔️ Variant Option






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"] or data.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.id and product.descriptionHtml are 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 notation data.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 is data[1].



Good Articles to Continue


Updated on: 27/10/2026

Was this article helpful?

Share your feedback

Cancel

Thank you!