# Conditions
Source: https://frimty.com/docs/features/conditions
Filter which events trigger a notification using field-level conditions
## Overview
Conditions are optional filters on a trigger that narrow down which events generate a notification. Without conditions, a trigger fires for every event of its type. With conditions, you can restrict it to specific cases — e.g., only orders over \$200, or only products from a specific vendor.
***
## How Conditions Work
Each condition has three parts:
| Part | Description | Example |
| ------------ | ------------------------ | ----------------- |
| **Field** | The data point to check | `Total Inventory` |
| **Operator** | How to compare the value | `Less than` |
| **Value** | The threshold or target | `10` |
Multiple conditions can be added to a single trigger. When you have more than one condition, you choose how they combine:
| Mode | Behavior |
| ----------------------------- | ---------------------------------------------- |
| **All conditions must match** | Every condition must be true (AND logic) |
| **Any condition can match** | At least one condition must be true (OR logic) |
If no conditions are set, the trigger fires for all events of its type (subject to change detection for update events).
***
## Operators
**String fields:**
| Operator | Behavior |
| --------------- | ------------------------------------------------- |
| Equals | Exact match (case-insensitive) |
| Doesn't Equal | Does not match exactly |
| Contains | Field includes the search text (case-insensitive) |
| Doesn't Contain | Field does not include the search text |
**Numeric fields:**
| Operator | Behavior |
| ------------- | ------------------------------------------- |
| Equals | Exact numeric match |
| Doesn't Equal | Not equal |
| Greater than | Field value is strictly above the threshold |
| Less than | Field value is strictly below the threshold |
***
## Condition Fields by Entity
### Product
Available for: **Product created**, **Product updated**, **Product deleted**
| Field | Type | Description |
| ------------ | ------ | -------------------------------- |
| Title | String | Product title |
| Status | String | `active`, `draft`, or `archived` |
| Product Type | String | Product type classification |
| Vendor | String | Vendor/manufacturer name |
| Tags | String | Comma-separated product tags |
| URL Handle | String | URL-friendly slug |
| Description | String | Product description (HTML body) |
| Field | Type | Description |
| --------------- | ------ | ----------------------------------- |
| Published At | String | When the product was published |
| Published Scope | String | Publication scope (`web`, `global`) |
| Field | Type | Description |
| ------------------------- | ------ | --------------------------------------------------- |
| Category | String | Shopify product category |
| Is Gift Card | String | Whether the product is a gift card (`true`/`false`) |
| Requires Selling Plan | String | Whether a selling plan is required |
| Has Only Default Variant | String | Whether the product has just one variant |
| Has Out-of-Stock Variants | String | Whether any variant is out of stock |
| Collections | String | Collections the product belongs to |
| Field | Type | Description |
| ---------------- | ------ | --------------------------- |
| Price | Number | Product price |
| Compare at Price | Number | Compare-at (original) price |
| Unit Price | Number | Per-unit price |
| Cost per Item | Number | Cost of goods per item |
| Field | Type | Description |
| ----------------- | ------ | --------------------------------------- |
| Total Inventory | Number | Sum of inventory across all variants |
| Charge Tax | String | Whether tax is charged (`true`/`false`) |
| Physical Product | String | Whether the product requires shipping |
| Inventory Tracked | String | Whether inventory tracking is enabled |
| Field | Type | Description |
| -------------------- | ------ | ------------------------ |
| SEO Page Title | String | Meta title for SEO |
| SEO Meta Description | String | Meta description for SEO |
***
### Order
Available for: **Order created**, **Order updated**, **Order paid**, **Order fulfilled**, **Refund created**
| Field | Type | Description |
| ------------ | ------ | ---------------------------- |
| Order Number | Number | Sequential order number |
| Order Name | String | Display name (e.g., `#1001`) |
| Field | Type | Description |
| ---------------------- | ------ | ------------------------------ |
| Total Price | Number | Grand total of the order |
| Subtotal Price | Number | Subtotal before tax/shipping |
| Total Discounts | Number | Total discount amount applied |
| Total Tax | Number | Total tax charged |
| Total Line Items Price | Number | Sum of all line item prices |
| Total Outstanding | Number | Amount remaining to be paid |
| Total Weight | Number | Combined weight of items |
| Current Total Price | Number | Current total (after edits) |
| Current Subtotal Price | Number | Current subtotal (after edits) |
| Total Tip Received | Number | Tip amount |
| Field | Type | Description |
| -------------------------- | ------ | ------------------------------------- |
| Email | String | Email on the order |
| Contact Email | String | Contact email address |
| Phone | String | Phone number |
| Currency | String | Order currency code (e.g., `USD`) |
| Presentment Currency | String | Display currency |
| Financial Status | String | `paid`, `pending`, `refunded`, etc. |
| Fulfillment Status | String | `fulfilled`, `partial`, `unfulfilled` |
| Display Financial Status | String | Human-readable financial status |
| Display Fulfillment Status | String | Human-readable fulfillment status |
| Customer ID | String | Associated customer ID |
| Note | String | Order notes |
| Source Name | String | Where the order originated |
| Tags | String | Order tags |
| Customer Locale | String | Customer's locale |
| Cancel Reason | String | Reason for cancellation |
| Landing Site | String | Landing page URL |
| Payment Gateway Names | String | Payment methods used |
| Field | Type | Description |
| ----------------------- | ------ | --------------------------------- |
| Buyer Accepts Marketing | String | Marketing opt-in status |
| Test Order | String | Whether this is a test order |
| Tax Exempt | String | Whether the order is tax exempt |
| Taxes Included | String | Whether prices include tax |
| Confirmed | String | Whether the order is confirmed |
| Edited | String | Whether the order has been edited |
| Duties Included | String | Whether duties are included |
| Field | Type | Description |
| ------------------ | ------ | ---------------- |
| Shipping City | String | City |
| Shipping Province | String | Province/state |
| Shipping Country | String | Country |
| Shipping Zip | String | Postal/ZIP code |
| Shipping Address 1 | String | Street address |
| Shipping Phone | String | Phone on address |
| Shipping Name | String | Name on address |
| Field | Type | Description |
| ----------------- | ------ | ---------------- |
| Billing City | String | City |
| Billing Province | String | Province/state |
| Billing Country | String | Country |
| Billing Zip | String | Postal/ZIP code |
| Billing Address 1 | String | Street address |
| Billing Phone | String | Phone on address |
| Billing Name | String | Name on address |
| Field | Type | Description |
| ------------------- | ------ | --------------------- |
| Customer Email | String | Customer's email |
| Customer First Name | String | Customer's first name |
| Customer Last Name | String | Customer's last name |
| Customer Phone | String | Customer's phone |
***
### Customer
Available for: **Customer created**, **Customer updated**, **Customer deleted**
| Field | Type | Description |
| ------------------------- | ------ | --------------------------------------- |
| Email | String | Customer email address |
| First Name | String | First name |
| Last Name | String | Last name |
| Phone | String | Phone number |
| Tags | String | Customer tags |
| Accepts Marketing | String | Email marketing opt-in (`true`/`false`) |
| Lifetime Amount Spent | Number | Total amount the customer has spent |
| Lifetime Number of Orders | Number | Total number of orders placed |
| Locale | String | Customer's locale |
| Product Subscriber Status | String | Subscription status |
| Tax Exemptions | String | Tax exemption info |
***
### Returns
Available for: all **Return** trigger types (requested, approved, declined, processing, closed, cancelled, reopened, updated)
| Field | Type | Description |
| ------------------- | ------ | ------------------------------ |
| Status | String | Current return status |
| Return Reason | String | Reason provided for the return |
| Line Item Count | Number | Number of items in the return |
| Total Refund Amount | Number | Total refund value |
| Currency | String | Currency code |
| Order ID | String | ID of the associated order |
| Customer Email | String | Customer's email address |
***
### Cart Abandoned
Available for: **Cart abandoned**
| Field | Type | Description |
| --------------- | ------ | --------------------------- |
| Customer Email | String | Customer's email address |
| First Name | String | Customer's first name |
| Last Name | String | Customer's last name |
| Total Price | Number | Cart total value |
| Currency | String | Currency code |
| Line Item Count | Number | Number of items in the cart |
***
## Condition Evaluation
Conditions are evaluated when a webhook is processed:
1. The worker loads the current entity data (enriched via Shopify GraphQL where needed — e.g., collections and inventory totals for products).
2. For each active trigger of the matching type, the evaluator checks every condition row.
3. Each condition's field value is looked up and compared using the specified operator.
4. Results are combined using the condition mode (`all` = AND, `any` = OR).
5. If the result is `true`, the notification is dispatched.
For **Product updated** and **Order updated** triggers, a notification is only sent when actual changes are detected compared to the previous snapshot. This prevents duplicate alerts from Shopify's occasional webhook re-deliveries.
# Dashboard
Source: https://frimty.com/docs/features/dashboard
Overview of the Alius home page — setup guide, metrics, and plan status
## Overview
The **Home** page is the main landing screen when you open Alius. It shows your setup status, activity metrics, current plan, and integration connection states.
***
## Setup Guide
When you first install Alius, the Home page displays a three-step setup checklist:
| Step | Description | Auto-detected |
| ------------------------- | ---------------------------------------------------------- | ------------------------------------------------------- |
| 1. Connect an integration | Connect Slack, Email, or Telegram on the Integrations page | Detected when any integration is connected |
| 2. Send a test message | Send a test notification to confirm delivery is working | Detected when a test message has been sent successfully |
| 3. Create a trigger | Create at least one trigger | Detected when any trigger exists |
Each step can also be manually checked off using the checkbox, which is useful if setup was completed outside the app's standard flow.
# Goals
Source: https://frimty.com/docs/features/goals
Set a target, track progress, and get accountability alerts
## Overview
A **Goal** is an accountability automation: you set a target for a store metric over a date range, and app tracks your progress and sends alerts as you approach — or fall behind — the target.
Goals turn a number you care about ("\$50,000 in revenue this quarter") into proactive nudges delivered to your hub, so you never have to remember to check.
Goals are a **Free / Pro / Max** feature and live under the **Automations** section alongside Triggers and Reports.
***
## What you can track
| Metric | Measures |
| ---------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------- |
| Revenue | Total sales since the goal start date |
| Order count | Number of orders since the start date |
| New customers | First-time buyers since the start date. A record is counted when a customer places their first-ever order within the period. |
| AOV | Average order value over the period |
| Each goal has a **target value**, a **start date**, and an **end date**. Progress is measured cumulatively from the start date using Shopify's analytics engine. | |
***
## Alert Types
A goal can send three kinds of deterministic alerts:
Fires once each as you cross **25% / 50% / 75% / 100%** of the target. Choose
which milestones to enable.
Alerts when your actual progress trails the expected linear pace by more than
10 points — so you know early if you're behind. Throttled to once per 7 days.
An optional weekly progress snapshot for the duration of the goal.
The goal is marked **completed** the moment progress reaches 100%, regardless
of which milestone alerts are enabled.
Goals are evaluated once per day at **08:00 UTC**.
***
## Lifecycle
```
scheduled → in_progress → completed (target reached)
└→ failed (end date passed without hitting target)
```
* **Scheduled** — the start date hasn't arrived yet.
* **In progress** — actively tracking; alerts may fire.
* **Completed** — target reached.
* **Failed** — the end date passed before the target was met.
***
## Creating a Goal
1. Click **Create Automation** → choose the **Goal** tab.
2. Pick a template or **Blank**.
3. Set the **Title**.
4. Choose a **Metric** (Revenue / Order count / New customers / AOV).
5. Enter the **Target value**.
6. Pick a **Start date** and **End date**.
7. Choose which **milestone alerts** to enable (all on by default).
8. Toggle **Pace warning** and **Weekly check-in** as desired.
9. Select a **Hub** and its channels/recipients.
10. Save.
Use **Fire (test)** to send a one-off progress snapshot without affecting the goal's saved state.
***
## Limits
| Plan | Active Goals |
| ---- | ------------ |
| Free | 1 |
| Pro | 5 |
| Max | Unlimited |
Only **active** goals count toward the limit. See [Pricing](/docs/guides/pricing).
# Integrations
Source: https://frimty.com/docs/features/integrations
Connect Slack, Email, Telegram, and Discord to receive Alius notifications
## Overview
Alius delivers notifications through four hubs: **Slack**, **Email**, **Telegram**, and **Discord**. Each must be connected before it can be selected in a trigger. Connections are managed on the **Integrations** page.
***
## Slack
Slack is connected via **OAuth 2.0**. Alius installs a bot in your workspace that posts messages to selected channels.
### Connecting Slack
1. Go to **Integrations** in the sidebar.
2. Click **Connect to Slack**.
3. You'll be redirected to Slack's OAuth authorization page. Select your workspace and click **Allow**.
4. After authorization, Alius stores the bot token and the status changes to **Connected**.
### Enabling Channels
Once connected, a list of your workspace's public channels appears.
1. Toggle on the channels where Alius should be allowed to post.
2. Click **Save** — the bot automatically joins each enabled channel.
Only enabled channels appear in the trigger form's channel picker. The bot must be a member of a channel to post messages to it.
### Sending a Test Message
Click **Send test notification** to post a test message to all enabled channels. This confirms the token is valid and the bot has channel access.
### Disconnecting Slack
Click **Disconnect** to remove the Slack integration. This clears the bot token, disables all channel mappings, and stops all Slack notifications. Your triggers are preserved and will resume sending once Slack is reconnected.
Alius uses a Slack bot token with permission to read channels and post messages. It does not read your team's private messages.
***
## Email
Email notifications are sent via Resend. You manage a list of verified recipient addresses — only verified and active recipients receive notifications.
### Adding a Recipient
1. Go to **Integrations** → **Email** section.
2. Enter an email address and click **Add Recipient**.
3. Alius sends a verification email to that address.
### Verifying a Recipient
The recipient must click the verification link in the email. Until verified, the address will not receive notifications.
Verification tokens expire. If the link is not clicked in time, you can regenerate the token by editing the recipient and changing the email address, then re-entering it.
### Managing Recipients
Each recipient has two states that can be toggled independently:
| State | Description |
| ------------ | ----------------------------------------------------- |
| **Verified** | Set automatically after the recipient clicks the link |
| **Active** | Controls whether this address receives notifications |
A recipient must be both verified **and** active to receive notifications.
To remove a recipient, click the delete icon next to their address.
***
## Telegram
Telegram notifications are sent via a Telegram bot. The bot is linked to a specific chat (personal chat, group, or channel) using a connection token.
### Connecting Telegram
1. Go to **Integrations** → **Telegram** section.
2. Click **Generate Connection Token**. A token is displayed — it is valid for **15 minutes**.
3. Open your Telegram chat (where you want to receive notifications) and send:
```
/connect
```
to the Alius bot.
4. The bot confirms the connection and the status changes to **Connected**.
### Sending a Test Message
Click **Send test notification** to post a test message to the connected chat. This confirms the bot token is valid and the chat ID is correctly linked.
### Disconnecting Telegram
Click **Disconnect** to unlink the chat. This stops all Telegram notifications. Reconnect at any time by generating a new token.
### Rate Limiting
Telegram enforces message rate limits. If Alius receives a rate-limit response (HTTP 429), it automatically retries the message up to 3 times with backoff. If all retries fail, the notification is logged as **Failed** in [Notification History](/docs/features/notification-history).
***
## Discord
Discord notifications are sent via an **incoming webhook** — no OAuth or bot setup is required. You create the webhook inside Discord and paste the URL into Alius.
### Creating a Discord Webhook
1. In Discord, open the channel where you want to receive notifications.
2. Go to **Channel Settings** → **Integrations** → **Webhooks**.
3. Click **New Webhook**, give it a name, and click **Copy Webhook URL**.
### Connecting Discord
1. Go to **Integrations** → **Discord** section.
2. Paste the webhook URL into the **Webhook URL** field.
3. Click **Connect**. Alius validates the URL format and saves it.
4. The status changes to **Connected**.
The webhook URL must start with `https://discord.com/api/webhooks/` or `https://discordapp.com/api/webhooks/`. Any other URL is rejected.
### Sending a Test Message
Click **Send test message** to post a test notification to the connected channel. This confirms the webhook is valid and the channel is accessible.
### Enabling and Pausing
Once connected, use the **Enable notifications** toggle to pause and resume Discord messages without disconnecting. Toggling it off stops all Discord notifications while preserving the webhook URL.
### Disconnecting Discord
Click **Disconnect** to remove the integration. This clears the webhook URL and stops all Discord notifications. Your triggers are preserved and will resume sending once Discord is reconnected.
### Message Format
Discord messages are posted as **embeds** by Alius, using Shopify green (`#008060`) as the accent color. The username shown in the channel is "Alius". If the trigger's content includes an admin link, the embed title links directly to the relevant resource in Shopify Admin.
### Rate Limiting
Discord enforces webhook rate limits. If Alius receives an HTTP 429 response, it reads the `retry_after` value from Discord's response and waits before retrying — up to 3 times. If all retries fail, the notification is logged as **Failed** in [Notification History](/docs/features/notification-history).
# Notification History
Source: https://frimty.com/docs/features/notification-history
View, filter, and search all notification delivery records
## Overview
The **History** page shows a log of every notification Alius has attempted to send. Each entry records what was sent, when, to which hub and recipient, and whether it succeeded.
***
## Notification Statuses
| Status | Description |
| ------------- | -------------------------------------------------------------------------------------------------- |
| **Sent** | The notification was delivered successfully |
| **Failed** | The delivery attempt failed (see the error message on the entry) |
| **Scheduled** | A batched notification is pending its send window (see [Schedule Types](/docs/features/schedule-types)) |
***
## Log Entry Fields
Each entry in the history log contains:
| Field | Description |
| --------------- | --------------------------------------------------------------------- |
| Trigger title | The name of the trigger that fired |
| Trigger type | The event type (e.g., `order created`, `product updated`) |
| Hub | The notification hub used: Slack, Email, or Telegram |
| Recipient | The specific channel, email address, or Telegram chat |
| Message preview | A short preview of the notification content |
| Timestamp | When the notification was created |
| Error message | Populated only for **Failed** entries — the error returned by the hub |
***
## Filtering
The history log can be filtered along three dimensions simultaneously:
| Filter | Options |
| ---------- | ---------------------------------------------------- |
| **Status** | All · Sent · Failed · Scheduled |
| **Type** | All · Products · Orders · Customers · Returns · Cart |
| **Search** | Free-text search on trigger title |
Filters are applied in combination — for example, you can search for failed notifications from order triggers.
***
## Sorting
Results can be sorted by:
* **Date** (newest first by default)
* **Hub** (Slack / Email / Telegram)
* **Status**
***
## Pagination
The history log displays **25 entries per page** by default. Use the pagination controls at the bottom of the page to navigate through older records.
***
## Failed Notifications
When a notification fails, the entry's error message field shows the reason returned by the hub (e.g., invalid token, channel not found, rate limit exceeded). Use this to diagnose delivery issues with your integration.
Common causes:
* **Slack**: Bot token revoked or bot removed from channel
* **Email**: Recipient address bounced or recipient is inactive
* **Telegram**: Chat ID no longer valid, or repeated rate-limit failures after retries exhausted
# Reports
Source: https://frimty.com/docs/features/reports
Scheduled analytics summaries pushed straight to your hub
## Overview
A **Report** is a scheduled automation that pulls analytics from your store, optionally adds an AI-written summary, and delivers it to a notification hub (Slack, Email, Telegram, or Discord) on a recurring schedule.
Where a [Trigger](/docs/features/triggers) reacts to an event, a Report runs on a clock — daily, weekly, or monthly — so you don't have to open the Shopify admin to know how the store is doing.
Reports live alongside Triggers and Goals under the **Automations** section.
***
## Data Source
Each report pulls its data one of two ways:
| Source | Description |
| ---------------------- | ------------------------------------------------------ |
| **Pre-built template** | A ready-made analytics query — pick from the dropdown. |
| **Custom query** | Write your own ShopifyQL query for full control. |
### Pre-built Report Templates
| Template | Default Schedule | What it shows |
| ----------------------- | ---------------- | ---------------------------------------- |
| Daily Revenue Summary | Daily, 8am | Total & gross sales for the previous day |
| Weekly Performance | Weekly, 9am | Day-by-day sales for the last 7 days |
| Inventory Health | Weekly, 9am | Low / out-of-stock variants |
| Monthly Business Review | Monthly, 8am | Sales over the last 3 months with totals |
| Lapsed Customers | Weekly, 9am | Customers who haven't ordered recently |
| Sales Pace Check | Daily, 12pm | Trailing 30-day revenue vs. pace |
Reports run on Shopify's analytics engine (ShopifyQL). The full set of stats
is available without any extra setup beyond connecting a hub.
***
## AI Summaries (Pro / Max)
On paid plans, Alius can prepend a short, plain-English **AI summary** above the report data:
> **AI Summary:** Revenue is up 12% week-over-week, driven mainly by repeat customers. Three products are now low on stock.
>
> ***
>
> *(the full report table follows)*
* Generated by AI from the rendered report — fast and inexpensive.
* **Fail-open:** if the summary can't be generated, the report still sends with its data intact.
* The deterministic data table is always included; the AI text is an addition, never a replacement.
Free plan reports send the data table without an AI summary.
***
## Creating a Report
1. Click **Create Automation** → choose the **Report** tab.
2. Pick a pre-built template or **Blank** to start from scratch.
3. Set the **Title**.
4. Choose a **Data source** (pre-built template or custom ShopifyQL).
5. Choose a **Schedule** and UTC hour (non-daily schedules require Pro/Max).
6. Select a **Hub** and its channels/recipients.
7. Save.
Use the **Fire (test)** button to send the report immediately and verify the output — this runs the real data + AI path.
***
## Limits
| Plan | Active Reports |
| ---- | -------------- |
| Free | 3 |
| Pro | 10 |
| Max | Unlimited |
Only **active** reports count toward the limit. See [Pricing](/docs/guides/pricing) for full details.
# Schedule Types
Source: https://frimty.com/docs/features/schedule-types
Control when notifications are sent — immediately or batched over time
## Overview
Every trigger has a **schedule** that controls when its notifications are delivered. Alius supports five schedule options: one immediate and four batched.
***
## Schedule Options
| Schedule | Behavior |
| ----------- | ----------------------------------------------------------- |
| **Instant** | Notification is sent immediately when the trigger fires |
| **Hourly** | Events are batched; one notification is sent once per hour |
| **Daily** | Events are batched; one notification is sent once per day |
| **Weekly** | Events are batched; one notification is sent once per week |
| **Monthly** | Events are batched; one notification is sent once per month |
The schedule is set per trigger when creating or editing it.
***
## Instant
Instant is the default schedule. The notification is dispatched as soon as the webhook is processed and conditions are met. There is no delay or batching.
Use instant when you need to act on events as they happen — for example, high-value orders, low stock alerts, or abandoned cart recovery.
***
## Batched Schedules (Hourly / Daily / Weekly / Monthly)
When a batched schedule is selected, Alius stores each matching event as a **Scheduled Notification** rather than sending it immediately. At the end of each scheduled interval, the worker collects all pending notifications for that trigger and sends a single consolidated message.
### What a batched notification contains
Each batched notification includes the message content from the most recent event in the batch window. The batch is cleared after sending.
### Batched notifications in History
Pending batched notifications appear in [Notification History](/docs/features/notification-history) with a status of **Scheduled** until they are sent. Once sent, the status changes to **Sent**.
### When to use batched schedules
| Schedule | Use case |
| -------- | ---------------------------------------------------------------------------------------------- |
| Hourly | Frequent events where per-event noise is too high (e.g., product updates during a bulk import) |
| Daily | End-of-day summaries — daily order counts, new customer signups |
| Weekly | Weekly digest reports — inventory changes, return summaries |
| Monthly | Monthly business reviews — aggregate order or customer metrics |
# Templates
Source: https://frimty.com/docs/features/templates
Customize notification message content using Markdown and dynamic variables
## Overview
Templates control the text content of notifications. If a trigger has no template assigned, Alius uses a built-in default format. Custom templates let you control exactly what appears in each notification using Markdown and `{{variable}}` placeholders.
***
## Template Types
Each template is scoped to an entity type, which determines which variables are available:
| Type | Available variables |
| -------- | --------------------------------- |
| Product | `product.*`, `product_previous.*` |
| Order | `order.*` |
| Customer | `customer.*` |
| Returns | `returns.*` |
| Cart | `cart.*` |
***
## Creating a Template
1. Go to **Templates** in the sidebar.
2. Click **Create Template**.
3. Fill in:
* **Title** — Name for the template (e.g., "High-value order alert")
* **Type** — Entity type (Product, Order, Customer, Returns, or Cart)
* **Content** — The message body using Markdown and variables
4. Click **Save**.
The template is then available in the trigger form's template picker.
***
## Markdown Syntax
Templates support a limited Markdown subset:
| Syntax | Output |
| --------------- | --------------------------- |
| `## Heading` | Bold heading / header block |
| `**bold text**` | Bold text |
| `[label](url)` | Clickable link |
| `---` | Horizontal divider |
| Plain text | Rendered as-is |
Markdown is converted per hub at send time:
* **Slack**: Headings → bold, links → `` format, `---` → divider block
* **Email**: Full HTML rendering with inline CSS
* **Telegram**: Headings → `*bold*`, links → Markdown v1 format, `---` → `──────────`
***
## Color Customization
Templates have optional color settings that apply per hub:
| Setting | Hub | Description | Default |
| ------------------- | -------- | ----------------------------------------------- | --------- |
| Email Header Color | Email | Background color of the email header bar | `#008060` |
| Email Link Color | Email | Color of hyperlinks in the email body | `#008060` |
| Telegram Background | Telegram | Background color accent in the Telegram message | `#008060` |
Colors are entered as hex values (e.g., `#FF5733`).
***
## Template Priority
When a notification is sent, Alius resolves the message content in this order:
1. **Linked Template** — If the trigger has a `templateId`, the saved template's content is used.
2. **Inline Message Template** — If the trigger has a custom message stored directly on the trigger record.
3. **Default Template + Conditions** — The built-in default for the entity type, automatically extended with any condition fields from the trigger.
4. **Built-in Formatter** — A fallback that generates a readable summary of what changed.
### Auto-Extension with Condition Fields
When a trigger uses the default template and has conditions configured, the default template is automatically extended to include those condition fields. For example, if your trigger has a condition on `inventoryTotal`, the notification will include:
```
Total Inventory: {{product.inventoryTotal}}
Previous Total Inventory: {{product_previous.inventoryTotal}}
```
***
## Built-in Default Templates
If no custom template is selected, Alius uses these defaults:
**Product Updated:**
```
Product Updated: {{product.title}}
Title:
Previous: {{product_previous.title}}
New: {{product.title}}
View Product in Shopify: {{product.adminUrl}}
```
**Order Created:**
```
Order Created: {{order.name}}
Customer: {{order.customerFirstName}} {{order.customerLastName}}
Total: {{order.totalPrice}} {{order.currency}}
View Order in Shopify: {{order.adminUrl}}
```
**Customer Updated:**
```
Customer Updated: {{customer.firstName}} {{customer.lastName}}
Email: {{customer.email}}
Tags: {{customer.tags}}
View Customer in Shopify: {{customer.adminUrl}}
```
**Cart Abandoned:**
```
Cart Abandoned
Customer: {{cart.firstName}} {{cart.lastName}}
Email: {{cart.customerEmail}}
Total: {{cart.totalPrice}} {{cart.currency}}
Items: {{cart.lineItemCount}}
Recovery URL: {{cart.recoveryUrl}}
```
***
## Template Variables Reference
Use `product_previous.*` variants for "previous" values in update notifications.
| Variable | Description |
| ----------------------------------- | --------------------------------------- |
| `{{product.id}}` | Product ID |
| `{{product.adminUrl}}` | Link to product in Shopify Admin |
| `{{product.title}}` | Product title |
| `{{product.status}}` | `active`, `draft`, or `archived` |
| `{{product.productType}}` | Product type classification |
| `{{product.vendor}}` | Vendor/manufacturer |
| `{{product.tags}}` | Comma-separated tags |
| `{{product.handle}}` | URL handle |
| `{{product.description}}` | Product description (HTML) |
| `{{product.publishedAt}}` | Publication date |
| `{{product.publishedScope}}` | Publication scope |
| `{{product.category}}` | Shopify product category |
| `{{product.isGiftCard}}` | Whether it's a gift card |
| `{{product.requiresSellingPlan}}` | Whether a selling plan is required |
| `{{product.hasOnlyDefaultVariant}}` | Whether only one variant exists |
| `{{product.outOfStockVariants}}` | Whether any variant is out of stock |
| `{{product.collections}}` | Collections the product belongs to |
| `{{product.price}}` | Product price |
| `{{product.compareAtPrice}}` | Compare-at price |
| `{{product.unitPrice}}` | Per-unit price |
| `{{product.costPerItem}}` | Cost of goods per item |
| `{{product.inventoryTotal}}` | Total inventory across all variants |
| `{{product.requiresShipping}}` | Whether the product requires shipping |
| `{{product.inventoryTracked}}` | Whether inventory tracking is enabled |
| `{{product.taxable}}` | Whether tax is charged |
| `{{product.seoTitle}}` | SEO meta title |
| `{{product.seoDescription}}` | SEO meta description |
| `{{product_previous.*}}` | All above fields for the previous state |
| Variable | Description |
| ------------------------------------ | --------------------------------- |
| `{{order.id}}` | Order ID |
| `{{order.adminUrl}}` | Link to order in Shopify Admin |
| `{{order.name}}` | Order name (e.g., `#1001`) |
| `{{order.orderNumber}}` | Order number |
| `{{order.totalPrice}}` | Grand total |
| `{{order.subtotalPrice}}` | Subtotal before tax/shipping |
| `{{order.totalDiscounts}}` | Total discount applied |
| `{{order.totalTax}}` | Total tax charged |
| `{{order.totalLineItemsPrice}}` | Sum of all line item prices |
| `{{order.totalOutstanding}}` | Amount remaining to be paid |
| `{{order.totalWeight}}` | Combined item weight |
| `{{order.currentTotalPrice}}` | Current total after edits |
| `{{order.currentSubtotalPrice}}` | Current subtotal after edits |
| `{{order.totalTipReceived}}` | Tip amount |
| `{{order.currency}}` | Currency code |
| `{{order.presentmentCurrency}}` | Display currency |
| `{{order.financialStatus}}` | Financial status |
| `{{order.fulfillmentStatus}}` | Fulfillment status |
| `{{order.displayFinancialStatus}}` | Human-readable financial status |
| `{{order.displayFulfillmentStatus}}` | Human-readable fulfillment status |
| `{{order.cancelReason}}` | Cancellation reason |
| `{{order.paymentGatewayNames}}` | Payment methods used |
| `{{order.email}}` | Email on the order |
| `{{order.phone}}` | Phone number on the order |
| `{{order.customerId}}` | Associated customer ID |
| `{{order.customerEmail}}` | Customer's email |
| `{{order.customerFirstName}}` | Customer's first name |
| `{{order.customerLastName}}` | Customer's last name |
| `{{order.customerPhone}}` | Customer's phone |
| `{{order.buyerAcceptsMarketing}}` | Marketing opt-in status |
| `{{order.locale}}` | Customer locale |
| `{{order.landingSite}}` | Landing page URL |
| `{{order.sourceName}}` | Order source |
| `{{order.tags}}` | Order tags |
| `{{order.note}}` | Order notes |
| `{{order.test}}` | Whether this is a test order |
| `{{order.confirmed}}` | Whether the order is confirmed |
| `{{order.edited}}` | Whether the order has been edited |
| `{{order.taxExempt}}` | Whether the order is tax exempt |
| `{{order.taxesIncluded}}` | Whether prices include tax |
| `{{order.dutiesIncluded}}` | Whether duties are included |
| `{{order.shippingName}}` | Name on shipping address |
| `{{order.shippingAddress1}}` | Shipping street address |
| `{{order.shippingCity}}` | Shipping city |
| `{{order.shippingProvince}}` | Shipping province/state |
| `{{order.shippingCountry}}` | Shipping country |
| `{{order.shippingZip}}` | Shipping postal code |
| `{{order.shippingPhone}}` | Shipping address phone |
| `{{order.billingName}}` | Name on billing address |
| `{{order.billingAddress1}}` | Billing street address |
| `{{order.billingCity}}` | Billing city |
| `{{order.billingProvince}}` | Billing province/state |
| `{{order.billingCountry}}` | Billing country |
| `{{order.billingZip}}` | Billing postal code |
| `{{order.billingPhone}}` | Billing address phone |
| Variable | Description |
| -------------------------------------- | --------------------------------- |
| `{{customer.id}}` | Customer ID |
| `{{customer.adminUrl}}` | Link to customer in Shopify Admin |
| `{{customer.email}}` | Email address |
| `{{customer.firstName}}` | First name |
| `{{customer.lastName}}` | Last name |
| `{{customer.phone}}` | Phone number |
| `{{customer.tags}}` | Tags |
| `{{customer.locale}}` | Locale |
| `{{customer.acceptsMarketing}}` | Marketing opt-in status |
| `{{customer.amountSpent}}` | Lifetime amount spent |
| `{{customer.numberOfOrders}}` | Lifetime number of orders |
| `{{customer.productSubscriberStatus}}` | Subscription status |
| `{{customer.taxExemptions}}` | Tax exemption info |
| Variable | Description |
| ------------------------------- | ------------------------------ |
| `{{returns.status}}` | Current return status |
| `{{returns.returnReason}}` | Reason provided for the return |
| `{{returns.lineItemCount}}` | Number of items in the return |
| `{{returns.totalRefundAmount}}` | Total refund value |
| `{{returns.currency}}` | Currency code |
| `{{returns.orderId}}` | ID of the associated order |
| `{{returns.customerEmail}}` | Customer's email address |
| Variable | Description |
| ------------------------ | --------------------------------- |
| `{{cart.id}}` | Checkout ID |
| `{{cart.recoveryUrl}}` | URL to recover the abandoned cart |
| `{{cart.customerEmail}}` | Customer's email address |
| `{{cart.firstName}}` | Customer's first name |
| `{{cart.lastName}}` | Customer's last name |
| `{{cart.totalPrice}}` | Cart total value |
| `{{cart.currency}}` | Currency code |
| `{{cart.lineItemCount}}` | Number of items in the cart |
# Triggers
Source: https://frimty.com/docs/features/triggers
Define which Shopify events to watch and where to send notifications
## Overview
A trigger is a rule that watches for a specific Shopify event and sends a notification to a hub (Slack, Email, Telegram, or Discord) when that event occurs. Each trigger can be filtered with [conditions](/docs/features/conditions) and scheduled for immediate or batched delivery.
***
## Trigger Types
Alius supports 20 trigger types across six Shopify entities:
### Product
| Trigger Type | Fires when… |
| --------------- | ---------------------------------------- |
| Product created | A new product is added to the store |
| Product updated | Any field on an existing product changes |
| Product deleted | A product is removed from the store |
### Order
| Trigger Type | Fires when… |
| --------------- | ---------------------------------- |
| Order created | A new order is placed |
| Order updated | An existing order's details change |
| Order paid | An order's payment is confirmed |
| Order fulfilled | An order is marked as fulfilled |
### Refund
| Trigger Type | Fires when… |
| -------------- | ------------------------------ |
| Refund created | A refund is issued on an order |
### Customer
| Trigger Type | Fires when… |
| ---------------- | ------------------------------------------ |
| Customer created | A new customer account is created |
| Customer updated | A customer's profile or preferences change |
| Customer deleted | A customer record is removed |
### Returns
| Trigger Type | Fires when… |
| ----------------- | -------------------------------------- |
| Return requested | A customer submits a return request |
| Return approved | A return request is approved |
| Return declined | A return request is declined |
| Return processing | A return is being processed |
| Return closed | A return is closed |
| Return cancelled | A return is cancelled |
| Return reopened | A previously closed return is reopened |
| Return updated | Any field on a return changes |
### Cart
| Trigger Type | Fires when… |
| -------------- | ----------------------------------------------- |
| Cart abandoned | A checkout is abandoned (no purchase completed) |
***
## Trigger Fields
Each trigger has the following configurable fields:
| Field | Required | Description |
| ----------------------- | -------- | --------------------------------------------------------------------------------------------------------------------------- |
| **Title** | Yes | A descriptive name shown in the triggers list |
| **Status** | Yes | Active (live) or Disabled (paused) |
| **Type** | Yes | The Shopify event to watch (see trigger types above) |
| **Notification Hub** | Yes | Where to send the notification: Slack, Email, Telegram, or Discord. Pro plan: select multiple hubs simultaneously |
| **Channels/Recipients** | Yes | For Slack: one or more enabled channels. For Email: verified recipients. For Telegram or Discord: the connected destination |
| **Schedule** | Yes | When to send: Instant, Hourly, Daily, Weekly, or Monthly. See [Schedule Types](/docs/features/schedule-types) |
| **Template** | No | A saved [template](/docs/features/templates) to use. Defaults to the built-in format if not set |
| **Conditions** | No | One or more field-level filters. See [Conditions](/docs/features/conditions) |
***
## Trigger Status
Each trigger has an **Active** / **Disabled** toggle:
* **Active** — The trigger is live and will fire notifications when events occur.
* **Disabled** — The trigger is paused. No notifications are sent, but configuration is preserved.
Triggers can be enabled or disabled from the trigger form or from the triggers list.
***
## Creating a Trigger
Creating a trigger is a two-step process:
**Step 1 — Choose a template**
Clicking **Create Trigger** opens the **template picker** page. You can either:
* Select a **pre-built template** (see [Pre-built Templates](#pre-built-templates) below) to start with a pre-configured type and conditions.
* Click **Blank Template** to start from scratch.
**Step 2 — Fill in the form**
1. Fill in the **Title**.
2. The **Type** and **Conditions** are pre-filled if you chose a template — you can adjust them.
3. Select a **Notification Hub**. On the Free plan this is a single-select dropdown; on Pro it is a multi-select so you can send to several hubs at once.
4. Select the **Channels/Recipients** for each hub.
5. Select a **Schedule** (defaults to Instant; non-instant schedules require Pro).
6. Optionally select a saved **Template**.
7. Click **Create Trigger**.
The trigger starts processing events immediately.
***
## Pre-built Templates
The template picker offers nine ready-made configurations. Selecting one pre-fills the trigger type, category, conditions, and condition mode — all of which can be adjusted before saving.
| Template | Type | Pre-set Condition |
| -------------------- | ---------------- | -------------------- |
| Low Stock | Product updated | Inventory total \< 5 |
| Out of Stock | Product updated | Inventory total = 0 |
| High-Value Order | Order created | Total price > \$500 |
| Abandoned Checkout | Cart abandoned | — |
| New Order | Order created | — |
| Order Refund | Refund created | — |
| Return from Customer | Return requested | — |
| Return from Admin | Return approved | — |
| New Customer | Customer created | — |
Templates are client-side only — no extra data is stored for choosing a template.
***
## Multi-Hub Notifications (Pro)
On the **Pro plan**, a single trigger can send to multiple hubs simultaneously — for example, Slack and Email and Discord all at once.
* The hub selector on the trigger form changes to **multi-select checkboxes**.
* Each selected hub uses its own channel/recipient configuration.
* Each hub+recipient pair produces a separate entry in [Notification History](/docs/features/notification-history).
On the **Free plan**, only one hub can be selected per trigger. A banner in the form explains the restriction and links to the upgrade page.
***
## Editing and Deleting Triggers
* Click any trigger row on the **Triggers** page to open the edit form.
* Use the checkbox column to select multiple triggers and delete them in bulk.
* A confirmation modal appears before deletion.
***
## Trigger Limits
| Plan | Active Trigger Limit |
| ---- | -------------------- |
| Free | 3 |
| Pro | 10 |
| Max | Unlimited |
Triggers are one of three automation types — Reports and Goals have their own separate limits. See [Reports](/docs/features/reports), [Goals](/docs/features/goals), and [Pricing](/docs/guides/pricing).
When the plan limit is reached:
* The **Create Automation** button is disabled with a warning banner.
* The banner includes an **Upgrade** button linking to Shopify's pricing page.
* The server also enforces the limit — the form submission is rejected if the UI is bypassed.
# Best Practices
Source: https://frimty.com/docs/guides/best-practices
Proven trigger configurations for the most common Shopify store alerts
## Overview
This guide covers the most popular alert setups that Shopify store owners rely on daily. Each recipe includes the exact trigger configuration, recommended conditions, and a suggested custom template — all achievable with Alius's current feature set.
***
## 1. Low Stock Alert
**Why it matters:** Running out of stock on a best-seller means lost revenue and disappointed customers. A low-stock alert gives you lead time to reorder before it's too late.
### Configuration
| Setting | Value |
| ------------------ | ------------------------- |
| **Title** | Low Stock Warning |
| **Type** | Product updated |
| **Condition Mode** | All conditions must match |
**Conditions:**
| Field | Operator | Value |
| ----------------- | --------- | ----- |
| Total Inventory | Less than | 10 |
| Inventory Tracked | Equals | true |
### Suggested Template
```
🚨 Low Stock Alert: {{product.title}}
Inventory is running low!
Current Stock: {{product.inventoryTotal}}
Previous Stock: {{product_previous.inventoryTotal}}
Vendor: {{product.vendor}}
Product Type: {{product.productType}}
Status: {{product.status}}
⚡ Reorder now before it's too late!
View Product: {{product.adminUrl}}
```
### Why This Works
* The **Total Inventory** field is the sum of all variant inventory quantities, fetched via the Shopify GraphQL API.
* Adding **Inventory Tracked = true** prevents false alerts for products where inventory isn't tracked (e.g., digital goods, services).
* Alius only fires this alert when the inventory value **actually changes** (thanks to snapshot-based change detection), so you won't get spam from unrelated product updates.
### Variations
| Variation | Condition Change |
| --------------------------- | --------------------------------------------- |
| Critical stock (almost out) | Total Inventory \< 3 |
| Warehouse buffer | Total Inventory \< 50 |
| Per-vendor monitoring | Add condition: Vendor Equals "\[Vendor Name]" |
***
## 2. High-Value Order Alert
**Why it matters:** Large orders deserve immediate attention — faster fulfillment, personalized thank-you notes, and fraud review.
### Configuration
| Setting | Value |
| ------------------ | ------------------------- |
| **Title** | High-Value Order |
| **Type** | Order created |
| **Condition Mode** | All conditions must match |
**Conditions:**
| Field | Operator | Value |
| ----------- | ------------ | ----- |
| Total Price | Greater than | 200 |
### Suggested Template
```
💰 High-Value Order: {{order.name}}
Total: {{order.totalPrice}} {{order.currency}}
Customer: {{order.customerFirstName}} {{order.customerLastName}}
Email: {{order.email}}
Financial Status: {{order.financialStatus}}
Fulfillment: {{order.fulfillmentStatus}}
Shipping To:
{{order.shippingName}}
{{order.shippingCity}}, {{order.shippingProvince}} {{order.shippingCountry}}
View Order: {{order.adminUrl}}
```
### Variations
| Variation | Condition Change |
| ---------------------- | ------------------------------ |
| VIP threshold (\$500+) | Total Price > 500 |
| Specific currency | Add: Currency Equals "USD" |
| Exclude test orders | Add: Test Order Equals "false" |
***
## 3. New Customer Welcome Alert
**Why it matters:** New customers are a growth signal. Alerting your team lets you welcome them, trigger onboarding sequences, or flag trends in acquisition.
### Configuration
| Setting | Value |
| ------------------ | -------------------------------------------- |
| **Title** | New Customer Signup |
| **Type** | Customer created |
| **Condition Mode** | (No conditions — fire for all new customers) |
### Suggested Template
```
👋 New Customer: {{customer.firstName}} {{customer.lastName}}
Email: {{customer.email}}
Phone: {{customer.phone}}
Accepts Marketing: {{customer.acceptsMarketing}}
View Customer: {{customer.adminUrl}}
```
### With Conditions (Marketing-Opted-In Customers Only)
| Field | Operator | Value |
| ----------------- | -------- | ----- |
| Accepts Marketing | Equals | true |
This filters to only customers who opted in to marketing — ideal for triggering welcome email sequences.
***
## 4. Order Fulfillment Status Change
**Why it matters:** Tracking fulfillment status changes helps operations teams stay on top of shipping, identify delays, and update customers proactively.
### Configuration
| Setting | Value |
| ------------------ | ------------------------- |
| **Title** | Order Fulfilled |
| **Type** | Order updated |
| **Condition Mode** | All conditions must match |
**Conditions:**
| Field | Operator | Value |
| ------------------ | -------- | --------- |
| Fulfillment Status | Equals | fulfilled |
### Suggested Template
```
📦 Order Fulfilled: {{order.name}}
Customer: {{order.customerFirstName}} {{order.customerLastName}}
Email: {{order.email}}
Total: {{order.totalPrice}} {{order.currency}}
Shipped To:
{{order.shippingCity}}, {{order.shippingCountry}}
View Order: {{order.adminUrl}}
```
### Variations
| Variation | Condition Change |
| ------------------- | --------------------------------------- |
| Partially fulfilled | Fulfillment Status Equals "partial" |
| Not yet fulfilled | Fulfillment Status Equals "unfulfilled" |
***
## 5. Refund & Cancellation Monitor
**Why it matters:** Spotting refunds and cancellations quickly lets you reach out to unhappy customers, investigate quality issues, and track return rates.
### Configuration (Refund Alert)
| Setting | Value |
| ------------------ | ------------------------- |
| **Title** | Order Refunded |
| **Type** | Order updated |
| **Condition Mode** | All conditions must match |
**Conditions:**
| Field | Operator | Value |
| ---------------- | -------- | -------- |
| Financial Status | Equals | refunded |
### Configuration (Cancellation Alert)
| Setting | Value |
| ------------------ | ------------------------- |
| **Title** | Order Cancelled |
| **Type** | Order updated |
| **Condition Mode** | All conditions must match |
**Conditions:**
| Field | Operator | Value |
| ---------------- | -------- | ------ |
| Financial Status | Equals | voided |
### Suggested Template (Refund)
```
⚠️ Order Refunded: {{order.name}}
Total Refunded: {{order.totalPrice}} {{order.currency}}
Customer: {{order.customerFirstName}} {{order.customerLastName}}
Email: {{order.email}}
Cancel Reason: {{order.cancelReason}}
View Order: {{order.adminUrl}}
```
***
## 6. Product Price Change Alert
**Why it matters:** Unintended price changes can cost revenue or erode customer trust. Monitoring price changes catches mistakes before they impact sales.
### Configuration
| Setting | Value |
| ------------------ | ------------------------------------------- |
| **Title** | Price Change Monitor |
| **Type** | Product updated |
| **Condition Mode** | (No conditions — monitor all price changes) |
### Suggested Template
```
💲 Price Change: {{product.title}}
Current Price: {{product.price}}
Previous Price: {{product_previous.price}}
Compare at Price: {{product.compareAtPrice}}
Previous Compare at: {{product_previous.compareAtPrice}}
Cost per Item: {{product.costPerItem}}
Vendor: {{product.vendor}}
View Product: {{product.adminUrl}}
```
Since Alius's snapshot system tracks all product fields, this trigger will fire whenever **any** product field changes. The template ensures the price information is always visible even if the change was to a different field. For true price-only alerts, add a condition: **Price Doesn't Equal 0** (to filter out products without prices), or use multiple triggers with specific price thresholds.
### Variation: Significant Price Drop
| Field | Operator | Value |
| ----- | --------- | ----- |
| Price | Less than | 20 |
This alerts you when any product's price drops below \$20 — useful for catching accidental discounts.
***
## 7. International / Regional Order Routing
**Why it matters:** If you ship internationally, certain countries may require customs documentation, different carriers, or longer handling times. Routing these orders to a dedicated Slack channel keeps your logistics team organized.
### Configuration
| Setting | Value |
| ------------------ | ---------------------------- |
| **Title** | International Order (Non-US) |
| **Type** | Order created |
| **Channel** | #international-orders |
| **Condition Mode** | All conditions must match |
**Conditions:**
| Field | Operator | Value |
| ---------------- | ------------- | ----- |
| Shipping Country | Doesn't Equal | US |
### Suggested Template
```
🌍 International Order: {{order.name}}
Shipping To: {{order.shippingCountry}}
{{order.shippingName}}
{{order.shippingAddress1}}
{{order.shippingCity}}, {{order.shippingProvince}} {{order.shippingZip}}
Total: {{order.totalPrice}} {{order.currency}}
Customer: {{order.customerFirstName}} {{order.customerLastName}}
View Order: {{order.adminUrl}}
```
### Variation: Specific Country Alerts
| Goal | Condition |
| ------------------ | ------------------------------------------------------------------------------------- |
| Orders from Canada | Shipping Country Equals "CA" |
| EU orders | Shipping Country Contains "DE" (repeat for each EU country, condition mode = **Any**) |
***
## 8. VIP Customer Activity Tracker
**Why it matters:** Your biggest spenders deserve VIP treatment. Track when their profiles are updated so you can maintain personalized service.
### Configuration
| Setting | Value |
| ------------------ | ------------------------- |
| **Title** | VIP Customer Change |
| **Type** | Customer updated |
| **Condition Mode** | All conditions must match |
**Conditions:**
| Field | Operator | Value |
| --------------------- | ------------ | ----- |
| Lifetime Amount Spent | Greater than | 1000 |
### Suggested Template
```
⭐ VIP Customer Update: {{customer.firstName}} {{customer.lastName}}
Email: {{customer.email}}
Lifetime Spent: {{customer.amountSpent}}
Total Orders: {{customer.numberOfOrders}}
Tags: {{customer.tags}}
View Customer: {{customer.adminUrl}}
```
***
## 9. Product Deleted / Unpublished Monitor
**Why it matters:** Accidental product deletions or status changes to "draft" can make products disappear from your storefront. Catching these immediately prevents lost sales.
### Configuration (Deleted)
| Setting | Value |
| ------------------ | ---------------------------------------- |
| **Title** | Product Deleted Alert |
| **Type** | Product deleted |
| **Condition Mode** | (No conditions — fire for all deletions) |
### Configuration (Unpublished/Archived)
| Setting | Value |
| ------------------ | ----------------------- |
| **Title** | Product Archived |
| **Type** | Product updated |
| **Condition Mode** | Any condition can match |
**Conditions:**
| Field | Operator | Value |
| ------ | -------- | -------- |
| Status | Equals | draft |
| Status | Equals | archived |
### Suggested Template (Deleted)
```
🗑️ Product Deleted: {{product.title}}
This product has been permanently removed from your store.
Vendor: {{product.vendor}}
Type: {{product.productType}}
Tags: {{product.tags}}
```
***
## 10. Tagged Order Routing
**Why it matters:** Many merchants use order tags to flag special handling — wholesale orders, subscription renewals, gift orders, etc. Routing tagged orders to dedicated channels keeps workflows clean.
### Configuration
| Setting | Value |
| ------------------ | ------------------------- |
| **Title** | Wholesale Order |
| **Type** | Order created |
| **Channel** | #wholesale |
| **Condition Mode** | All conditions must match |
**Conditions:**
| Field | Operator | Value |
| ----- | -------- | --------- |
| Tags | Contains | wholesale |
### Suggested Template
```
🏷️ Wholesale Order: {{order.name}}
Tags: {{order.tags}}
Total: {{order.totalPrice}} {{order.currency}}
Customer: {{order.customerFirstName}} {{order.customerLastName}}
Source: {{order.sourceName}}
Payment: {{order.paymentGatewayNames}}
View Order: {{order.adminUrl}}
```
### Variations
| Goal | Condition |
| -------------------- | --------------------------------- |
| Gift orders | Tags Contains "gift" |
| Subscription renewal | Tags Contains "subscription" |
| Priority shipping | Tags Contains "rush" or "express" |
***
## Free Plan Strategy
On the **Free plan** (1 trigger limit), here's how to maximize value:
**Use a broad trigger** with a well-crafted template to cover the most ground. The best single-trigger options are:
1. **"Order created" (no conditions)** — Captures every new sale. The most universally useful alert for solo merchants.
2. **"Order created" with Total Price > \[threshold]** — If you get high volume, filter to only significant orders.
3. **"Product updated" with Total Inventory \< 10** — If inventory management is your top priority.
When you're ready for more granular control, upgrade to **Pro** for unlimited triggers and create targeted alerts for each scenario in this guide.
***
## Channel Organization Tips
Use channels like `#orders`, `#inventory-alerts`, `#customer-activity` to keep different alert types separated.
Send critical alerts (low stock, high-value orders) to a channel with Slack notifications enabled. Send informational alerts (new customers, product updates) to a channel with notifications muted.
Send order alerts to the fulfillment team's channel, inventory alerts to operations, and customer alerts to customer success.
Configure per-channel notification preferences in Slack so team members are only interrupted by truly urgent alerts.
# Pricing
Source: https://frimty.com/docs/guides/pricing
Alius Free, Pro, and Max plans — what's included and how billing works
## Plans Overview
Alius has three tiers. Limits apply **per automation type** — Triggers, Reports, and Goals each have their own allowance.
**\$0 / month**
* ✅ 3 active triggers
* ✅ 3 active reports
* ✅ 1 active goal
* ✅ All trigger types & conditions
* ✅ Custom templates
* ✅ Slack, Email, Telegram, Discord, HTTP
* ✅ Single hub per automation
**\$9.99 / month**
* ✅ 10 active triggers
* ✅ 10 active reports
* ✅ 5 active goals
* ✅ **Multi-hub** per automation
* ✅ **AI summaries** on reports & digests
**\$19.99 / month**
* ✅ **Unlimited** triggers
* ✅ **Unlimited** reports
* ✅ **Unlimited** goals
* ✅ Multi-hub per automation
* ✅ AI summaries
## Plan Comparison
| Feature | Free | Pro | Max |
| ---------------------------------- | ------------- | --------- | ---------- |
| **Price** | \$0/mo | \$9.99/mo | \$19.99/mo |
| **Active Triggers** | 3 | 10 | Unlimited |
| **Active Reports** | 3 | 10 | Unlimited |
| **Active Goals** | 1 | 5 | Unlimited |
| Trigger types & conditions | ✅ | ✅ | ✅ |
| Custom Templates | ✅ | ✅ | ✅ |
| Slack / Email / Telegram / Discord | ✅ | ✅ | ✅ |
| **Multi-Hub per automation** | ❌ Single only | ✅ | ✅ |
| **Schedule Types** | All types | All types | All types |
| **AI Report & Digest Summaries** | ❌ | ✅ | ✅ |
| Notification History | ✅ | ✅ | ✅ |
| Dashboard Metrics | ✅ | ✅ | ✅ |
An automation only counts toward your limit while it is **active**. Disabled
triggers, reports, and goals do not consume a slot.
***
## Frequently Asked Questions
Each automation type (Trigger, Report, Goal) has its own limit and counts
independently. Only **active** automations count — disabled ones are free.
No. Excess automations are set to "disabled" status, never deleted. Upgrade
again to re-enable them.
The **oldest** entries (by creation date) per type, up to the target plan's
limit. The rest are disabled.
Pro raises every limit and unlocks multi-hub, all schedule types, and AI
summaries. Max removes the limits entirely — unlimited triggers, reports,
and goals.
Your subscription state is synced from Shopify's Partner API automatically.
An active paid subscription is restored.
# Introduction
Source: https://frimty.com/docs/introduction
What Alius is and how it works
## What is Alius?
**Alius** is a Shopify app that delivers the right store information to **Slack, Email, Telegram, and Discord** at the right time — without you ever opening the Shopify admin.
It does this through **Automations**, which come in three kinds:
* **Triggers** — react to a Shopify event (new order, low stock, return…) and alert you instantly.
* **Reports** — pull scheduled analytics (daily revenue, weekly performance…), optionally summarized by AI, and push them to your hub.
* **Goals** — track a target metric over time and nudge you as you approach or fall behind.
All three are managed together under the **Automations** section.
***
## How it works
Connect Slack via OAuth, add verified email recipients, link a Telegram chat using a connection token, or paste a Discord incoming webhook URL. Each hub is configured on the **Integrations** page.
Add a Trigger to watch for events, a Report for scheduled analytics, or a Goal to track a target — and pick which hub each one notifies.
Alius processes Shopify webhooks in real time and runs scheduled reports and goals, delivering everything to your configured hubs.
***
## Core Concepts
| Concept | Description |
| --------------- | -------------------------------------------------------------------------------------------------------------------- |
| **Automation** | Any of the three automation types — Trigger, Report, or Goal — all managed under the **Automations** section. |
| **Trigger** | A rule that defines which Shopify event to watch, where to send the notification, and optional filters and schedule. |
| **Report** | A scheduled analytics summary (daily/weekly/monthly), optionally enriched with an AI summary, delivered to a hub. |
| **Goal** | A target metric tracked over a date range, with milestone, pace, and check-in alerts. |
| **Condition** | An optional filter on a trigger — e.g., "only when Total Price > 50" or "only when Vendor equals Nike". |
| **Template** | A reusable message format with dynamic placeholders like `{{product.title}}` or `{{order.totalPrice}}`. |
| **Integration** | A connection to a notification hub: Slack, Email, Telegram, or Discord. |
| **Schedule** | Controls delivery timing: Instant (immediate) or batched (Hourly, Daily, Weekly, Monthly). |
| **Snapshot** | An internal record of the last known state of a product, order, or customer — used to detect what actually changed. |
| **History** | A log of all notification delivery attempts with status, recipient, and error details. |
***
## Supported Events
Alius monitors the following Shopify events:
| Entity | Events |
| ------------- | -------------------------------------------------------------------------------------- |
| **Products** | Created · Updated · Deleted |
| **Orders** | Created · Updated · Paid · Fulfilled |
| **Refunds** | Created |
| **Customers** | Created · Updated · Deleted |
| **Returns** | Requested · Approved · Declined · Processing · Closed · Cancelled · Reopened · Updated |
| **Cart** | Abandoned |
Each event type supports [conditions](/docs/features/conditions) with dozens of filterable fields.
***
## Features
20 trigger types across products, orders, customers, returns, and carts.
Scheduled analytics summaries with optional AI insights, pushed to your hub.
Track a target metric over time with milestone and pace alerts.
Filter triggers with field-level conditions across 50+ fields per entity.
Deliver notifications to Slack, Email, Telegram, or Discord.
Customize message content with Markdown and dynamic `{{variable}}` placeholders.
Send instantly or batch notifications hourly, daily, weekly, or monthly.
View delivery logs with status, recipient, message preview, and error details.
***
## Next Steps
Get up and running in under 5 minutes.
Free, Pro, and Max plan details.
# Quickstart
Source: https://frimty.com/docs/quickstart
Get Alius up and running in under 5 minutes
## Prerequisites
* A **Shopify store** (development or live)
* A notification destination: a **Slack workspace**, an **email address**, a **Telegram chat**, or a **Discord channel with an incoming webhook**
## Step 1 — Install Alius
Install Alius from the Shopify App Store. After installation, Alius appears in your Shopify Admin under **Apps → Alius**.
When you open the app for the first time, the **Home** page displays a setup guide checklist.
## Step 2 — Connect a Notification Hub
Alius supports four notification hubs: **Slack**, **Email**, **Telegram**, and **Discord**. Connect at least one before creating triggers.
Navigate to **Integrations** in the left sidebar and follow the steps for your chosen hub:
**Slack (OAuth):**
1. Click **Connect to Slack**.
2. Authorize on Slack's OAuth page and click **Allow**.
3. Once connected, enable the channels where Alius should post and click **Save**.
**Email:**
1. Enter an email address in the Email section and click **Add Recipient**.
2. The recipient must click the verification link sent to that address.
3. Once verified, toggle the recipient to **Active**.
**Telegram:**
1. Click **Generate Connection Token** — the token is valid for 15 minutes.
2. In your Telegram chat, send `/connect ` to the Alius bot.
3. The bot confirms the connection.
**Discord:**
1. In Discord, open the target channel → **Channel Settings** → **Integrations** → **Webhooks** → **New Webhook**.
2. Copy the webhook URL.
3. Paste it into the **Webhook URL** field in the Discord section and click **Connect**.
See the [Integrations](/docs/features/integrations) page for full details on each hub.
## Step 3 — Send a Test Message
On the **Integrations** page, click **Send test notification** for your connected hub. Confirm the message arrives at the destination.
## Step 4 — Create Your First Trigger
1. Navigate to **Triggers** in the left sidebar.
2. Click **Create Trigger**. You'll land on the **template picker** page.
3. Choose a pre-built template (e.g., "New Order") or click **Blank Template** to start from scratch.
4. Fill in the form:
* **Title:** A descriptive name (e.g., "New Order Alert").
* **Type:** Pre-filled if you chose a template — change it if needed.
* **Notification Hub:** Select your connected hub.
* **Channels/Recipients:** Pick the target channel, email, Telegram chat, or Discord webhook.
5. Click **Create Trigger**.
Alius will now send a notification every time the selected event occurs.
## Step 5 — (Optional) Add Conditions
To filter which events trigger a notification — for example, only orders over \$100:
1. On the trigger form, click **⊕** under "Additional conditions".
2. Set:
* **Field:** Total Price
* **Operator:** Greater than
* **Value:** 100
3. Save the trigger.
See [Conditions](/docs/features/conditions) for the complete list of filterable fields and operators.
## What's Next?
All 20 trigger types and configuration options.
Full setup guide for Slack, Email, Telegram, and Discord.
Customize notification message content.
Filter triggers with 50+ condition fields.