---
title: "Shopify Order Notifications That Reach Your Phone in Seconds"
description: "Send Shopify webhooks straight to your phone: a quiet push for every order, a louder one for big carts, and a call when a refund needs you."
date: 2026-09-09
author: Nooc
authorAvatarLink: /images/avatars/nooc.webp
authorLink: https://nooc.me
tags:
  - Shopify
  - order notifications
  - ecommerce alerts
  - webhook notifications
  - small business
---

# Shopify Order Notifications That Reach Your Phone in Seconds

Shopify's own order emails arrive whenever your mail app decides to sync, land in a folder you filter, and look identical whether the order was €12 or €1,200. If you run the shop yourself, that is the wrong shape of signal.

A webhook fixes it. Shopify will POST every order to a URL you choose, and Echobell turns that POST into a notification whose loudness you decide.

## Pick the topics that are worth interrupting you

Shopify calls webhook event types **topics**. These four cover most single-operator shops:

| Topic | What it means | Urgency |
| --- | --- | --- |
| `orders/create` | An order was placed. | Normal |
| `orders/paid` | Payment cleared. Use this one if you only care about money that actually arrived. | Normal |
| `orders/cancelled` | A customer cancelled. Worth knowing before you pack it. | Time-sensitive |
| `refunds/create` | A refund was issued. | Time-sensitive |

Subscribe to `orders/create` **or** `orders/paid`, not both, unless you genuinely want two notifications per sale. For most shops `orders/paid` is the honest one.

## Step 1 — Create the channel

Create a channel in Echobell called something like "Shopify orders", copy its webhook URL, and turn on **POST Only**. Shopify always posts.

If you want a separate, louder channel for cancellations and refunds, make that one now too and set it to time-sensitive.

## Step 2 — Add the webhook in Shopify

In the Shopify admin, go to **Settings → Notifications → Webhooks → Create webhook**. Choose the topic, set the format to **JSON**, and paste your channel URL.

Shopify sends a test payload when you save. If your phone buzzes, the path works.

## Step 3 — Template the fields you actually read

Shopify order payloads are long — a hundred-plus fields per order. You only need a few:

**Title**

```
New order #{{order_number}} · {{total_price}} {{currency}}
```

**Body**

```
{{customer.first_name}} {{customer.last_name}}
{{line_items[0].title}}
```

`line_items` is an array, so `line_items[0]` is the first item. Echobell templates support index access, but there is no loop — a three-item order shows the first item and nothing else. If that matters, put the item count next to it:

```
{{line_items[0].title}} · {{line_items.length}} items in total
```

Unlike Stripe, Shopify sends `total_price` as a decimal string — `"49.00"`, not `4900` — so it reads correctly with no maths.

## Step 4 — Route by topic with a condition

If you point several topics at one channel, Shopify tells you which is which in a header:

```
header["x-shopify-topic"] == "orders/paid"
```

That is the cleanest way to split behaviour without creating a webhook per channel in the admin.

## Only wake me for big orders

The pattern most shop owners actually want: every order goes to a quiet channel, and only the ones above a threshold go to a loud one.

Create a second channel, set it to time-sensitive, point another `orders/paid` webhook at it, and give it a condition:

```
total_price > 500
```

Now a normal day is a background hum and a €900 order is something you feel.

## What this does not do

**No HMAC verification.** Shopify signs every webhook with an `X-Shopify-Hmac-Sha256` header. Echobell does not verify it, so your channel URL is the only thing keeping strangers out. Keep it secret, keep POST Only on, and if a forged order notification would cause real harm, put your own endpoint in front to verify the HMAC and have it call Echobell.

**Shopify can deliver the same webhook twice.** It retries on failure, and retries are not deduplicated. Treat the notification as a nudge to look at the order, not as a count of orders. Your Shopify admin is the source of truth.

**Sold-out and inventory topics get noisy fast.** `inventory_levels/update` fires on every stock movement including your own edits. If you want low-stock alerts, filter hard with a condition or you will regret it by lunchtime.

## Frequently asked questions

### Do I need a Shopify app to do this?

No. Webhooks under **Settings → Notifications** are built into the admin and need no app, no partner account, and no code.

### Can my warehouse see the orders without seeing my Shopify admin?

Yes. Share the channel with them. They get the notifications and nothing else — no admin access, no customer records beyond what your template includes.

### Should I put customer names in the notification?

That is your call, and it is worth making deliberately. Anything in the template shows up on a lock screen. Order number and total are usually enough to act on.

### Can I get a phone call for a chargeback?

Shopify Payments disputes come through the `disputes/create` topic on stores using Shopify Payments. Point that at a calling channel — it is the one order event with a deadline attached.

## Wrap-up

One webhook, one template, and a condition if you want the loud version. It takes about five minutes and it replaces refreshing the orders page.

[Download Echobell for iPhone](https://apps.apple.com/app/apple-store/id6743597198?pt=128151925&ct=blog-shopify-order-notifications-en&mt=8) or [get it on Google Play](https://play.google.com/store/apps/details?id=one.echobell.echobellandroid), then place a test order and watch it arrive before the confirmation email does.

---

## Related

- [Stripe payment alerts](/en/blog/stripe-payment-alerts)
- [Webhook trigger documentation](/en/docs/webhook)
- [Template system reference](/en/docs/template)
- [Channel conditions reference](/en/docs/conditions)
- [A developer's guide to fixing alert fatigue](/en/blog/fix-alert-fatigue-developer-guide)
