# Shopify SMS: order, shipping and cart texts

Source: https://jointextkit.com/integrations/shopify
Index: https://jointextkit.com/llms.txt

Connect a Shopify store and TextKit keeps its customers, and their SMS
consent, in your contacts. Then three automations text your shoppers: an
order confirmation, a shipping update with the tracking link, and a reminder
for a checkout they left. You write the texts and pick the number they come
from. TextKit sends them, answers STOP and HELP, and holds any text that
would land outside 8am to 9pm in the shopper's time zone.

## Connect the store

Open Console, then Contacts, then Integrations, and choose Shopify. There
are two ways in:

- **Connect with Shopify.** Type your store address (acme.myshopify.com),
  press the button, and approve read access in your Shopify admin. TextKit
  keeps the access encrypted and revokes it when you disconnect.
- **Paste a credential.** An Admin API access token from an app you made for
  your store, or a Dev Dashboard app's client ID and secret. The app needs
  the `read_customers` scope, and `read_orders` for orders and carts.

Either way, TextKit reads your customers once to prove the connection works,
then every 6 hours. Each customer with a phone number becomes a contact in a
list named after the store. Pass a customer search like `tag:vip` to sync
only part of the store.

## Consent comes from Shopify

A shopper who ticked the SMS box at your checkout is subscribed in Shopify,
and TextKit records that as an opt-in, dated when Shopify last changed it.
A shopper who unsubscribed in Shopify is recorded as opted out. Anything
else is not consent, so a phone number on a shipping address alone never
lets you text someone. A STOP reply always wins: no sync lifts it.

## Order confirmations and shipping updates

Each new order becomes an `order_placed` event with the order number, its
status page link, the total and the items. Each shipment that gets a
tracking number becomes `order_shipped` with the number, the link and the
carrier. Create a flow from the **Order confirmation** or **Shipping
update** template in Console, then Automations:

```text
Acme: your order #1001 has shipped. Track it here:
https://www.ups.com/... Reply STOP to opt out.
```

Every order and every shipment counts once, and the store is checked at
least every 10 minutes while a flow is on. These texts go only to shoppers
whose opt-in is on file with TextKit. Everyone else is skipped, and the
run's timeline says why. Your own verified numbers always get them, so you
can try a flow on yourself first. The full list of event properties is in
[order and shipping texts](/docs/abandoned-cart#order-and-shipping-texts).

## Abandoned cart reminders

A shopper who reaches checkout and leaves becomes a `checkout_started`
event with the cart link. The **Abandoned cart** template waits an hour for
an order and, if none came, sends one text with the link. A cart reminder is
a marketing text, so it goes only to shoppers who agreed to texts. The store
is checked for new carts and orders every 10 minutes while the flow is on.
Details are in [abandoned cart texts](/docs/abandoned-cart).

## Before you go live

You need a number that can text the public: a registered local number or a
verified toll-free number ([compliance](/docs/compliance)). Try every flow
with a [test key](/docs/sandbox) first, since sandbox runs never text real
shoppers. Nothing is read from the store for orders or carts until a flow
that needs them is active, and disconnecting stops every read.

## Shopify's docs

- [Admin API access tokens](https://shopify.dev/docs/apps/build/authentication-authorization/access-tokens)
- [Apps in the Dev Dashboard](https://shopify.dev/docs/apps/build/dev-dashboard)
- [Customer contact information and SMS consent](https://help.shopify.com/en/manual/promoting-marketing/create-marketing/customer-contact-information)
- [Order status page](https://help.shopify.com/en/manual/fulfillment/setup/order-status-page)
