Products
The Products page displays your complete product catalog with filtering and search capabilities.
Dashboard Features
Catalog Statistics
Three key metrics at the top:
| Metric | Description |
|---|---|
| Total Products | Number of products in your catalog |
| Categories | Number of unique product categories |
| Brands | Number of unique product brands |
Filters
Filter products using multiple criteria:
| Filter | Description |
|---|---|
| Search | Find products by name, description, or SKU |
| Category | Filter by product category |
| Brand | Filter by brand name |
| Stock Status | Show In Stock, Out of Stock, or All |
Product Table
A sortable table displaying:
| Column | Description |
|---|---|
| Image | Product thumbnail or placeholder |
| Name | Product name and SKU |
| Price | Current price and compare-at price (strikethrough) |
| Category | Product categories (badges) |
| Brand | Brand name |
| Stock | In Stock (green) or Out of Stock (red) |
Viewing Products
- Navigate to E-Commerce > Products
- Use the search box to find specific products
- Apply filters to narrow results
- Browse paginated results
Understanding Product Data
Product Fields
| Field | Description |
|---|---|
externalId | Your unique product identifier (e.g., SKU) |
name | Product display name |
price | Current selling price |
compareAtPrice | Original price (shows discount) |
currency | Price currency code |
categories | Array of category names |
tags | Array of product tags |
brand | Brand or vendor name |
imageUrl | Main product image |
inStock | Availability status |
variants | Size/color variations |
Variants
Products can have multiple variants with different:
- Prices
- SKUs
- Stock status
- Options (size, color, etc.)
Syncing Products
Products are typically synced from your e-commerce platform. Joryio supports:
- Shopify - Automatic sync via webhook
- WooCommerce - REST API integration
- Magento - Joryio Connect extension
- Custom platforms - Use the Products API
Bulk Import
Use the bulk upsert API to import products - POST a bare JSON array (max 500) to the products endpoint:
POST /catalog/products
[
{ "productId": "SKU-001", "name": "Product 1", "price": 19.99, "source": "shopify" },
{ "productId": "SKU-002", "name": "Product 2", "price": 29.99, "source": "shopify" }
]
Using Products in Campaigns
Product Recommendations
Include products in email campaigns using Liquid templates:
{% for product in recommended_products %}
<div class="product">
<img src="{{ product.imageUrl }}" alt="{{ product.name }}">
<h3>{{ product.name }}</h3>
<p>${{ product.price }}</p>
<a href="{{ product.url }}">Shop Now</a>
</div>
{% endfor %}
Abandoned Cart Products
Access cart products in recovery emails:
{% for item in cart.items %}
<p>{{ item.name }} x {{ item.quantity }} - ${{ item.total }}</p>
{% endfor %}
<p>Cart Total: ${{ cart.value }}</p>
<a href="{{ cart.checkoutUrl }}">Complete Purchase</a>
Product Selections
A Selection is a saved, reusable filter over your product catalog - for example
"discounted footwear", "in-stock items under $50", or "everything tagged new-arrival".
Build them once and reuse them wherever you show products.
Create one: on the Products page click Selections → New Selection. Give it a name, add one or more rules over product fields (name, brand, price, in-stock, categories, tags, …) with type-aware operators, choose whether to match all or any of the rules, and set a max number of products. Preview shows exactly which products match right now.
Selections are the product-catalog counterpart of entity Selections - a saved filter tree you can point content and recommendations at instead of hand-listing product IDs.
Best Practices
- Keep products synced: Ensure regular sync with your e-commerce platform
- Use high-quality images: Product images improve email engagement
- Maintain accurate stock: Out-of-stock notifications require accurate data
- Categorize consistently: Use consistent categories for better filtering
- Include URLs: Product URLs enable click-through tracking
Troubleshooting
Products Not Appearing
- Check your API authentication
- Verify workspace ID is correct
- Ensure products have required fields (externalId, name, price)
Images Not Loading
- Verify image URLs are publicly accessible
- Check for HTTPS requirements
- Ensure image URLs aren't expired
Stock Status Incorrect
- Sync interval may need adjustment
- Check webhook configuration
- Verify inventory tracking is enabled