# Before the order

These recipes cover the shoppers who have not ordered yet: new accounts, shoppers who look at products, and shoppers who fill the cart and leave. Before you build them, read the [best practices for every journey](/tutorials/industry-playbooks/ecommerce/build-the-journeys/#best-practices-for-every-journey).

## Welcome and first order

* **Use it when:** a shopper creates an account and you want the first order.
* **Starts when:** a shopper signs up (`Signed up`).
* **What it does:** sends a welcome push, then reminds the shopper of the welcome offer after 2 days if no order was placed.
* **Content to prepare:** a push preset with the welcome message and a push preset with the reminder.
* **Needs:** the `Signed up` and `Order placed` events.

<img src="/industry-playbooks-ecommerce-4.webp" alt="Welcome journey: Signed up entry, welcome push, 2-day Wait for Trigger on Order placed, reminder push if not triggered"/>

1. On the journey canvas, add a [Trigger-based entry](/product/customer-journey/journey-elements/entry-elements/trigger-based-entry/) on `Signed up`.
2. Add a [push](/product/customer-journey/journey-elements/channels/push/) that welcomes the shopper and mentions the offer, for example: "Welcome! Your first order ships free."
3. Add a [Wait for Trigger](/product/customer-journey/journey-elements/flow-controls/wait-for-trigger/) step on `Order placed` and set the waiting period to 2 days. Leave the **Trigger group 1** branch empty, so shoppers who ordered leave the journey without more messages.
4. On the **Not triggered** branch, add a [push](/product/customer-journey/journey-elements/channels/push/) with a reminder, for example: "Your free shipping is still waiting."
5. On the canvas, click **Settings** and select [**Conversion goals**](/product/customer-journey/journey-settings/#conversion-goals).
6. In the goal, choose `Order placed` and select **End journey after this event**.

## Reminder about viewed products

* **Use it when:** shoppers look at products several times and add nothing to the cart.
* **Starts when:** a shopper enters the [Browsers without a cart](/tutorials/industry-playbooks/ecommerce/build-the-segments/#browsers-without-a-cart) segment. Pushwoosh checks the segment on a schedule you set, for example daily, and every shopper in the segment enters at each check.
* **What it does:** sends one push that reminds the shopper of what they looked at, with no discount.
* **Content to prepare:** a push preset. To add similar products from your feed, create it as a [product recommendations preset](/product/content/push-presets/build-push-content-from-a-feed/) with the **Recently viewed** strategy. It picks products that other shoppers viewed or bought together with the ones this shopper viewed, and leaves out the products the shopper already saw.
* **Needs:** the `Product viewed` event. For **Recently viewed**, the event must carry `product_id` with the same ID as in your [Product catalog](/product/content/product-catalog/). The strategy picks products for each shopper, so the editor can't preview them.

<img src="/industry-playbooks-ecommerce-5.webp" alt="Reminder about viewed products journey: daily entry on Browsers without a cart, Reachability check, push or in-app"/>

1. On the journey canvas, add an [Audience-based entry](/product/customer-journey/journey-elements/entry-elements/audience-based-entry/) on the [Browsers without a cart](/tutorials/industry-playbooks/ecommerce/build-the-segments/#browsers-without-a-cart) segment.
2. Set the entry schedule to **Recurring entry** and choose **Periodically**, for example daily.
3. On the canvas, click **Settings** and select [**Campaign Entry Limit**](/product/customer-journey/journey-settings/#campaign-entry-limit).
4. Choose **Custom period** and set **Once in** to **a week**, so a shopper who stays in the segment gets one reminder a week, not one a day.
5. Add a [Reachability check](/product/customer-journey/journey-elements/flow-controls/reachability-check/). For shoppers [reachable by push](/product/first-steps/pushwoosh-glossary/#reachable-by-push), add a [push](/product/customer-journey/journey-elements/channels/push/), for example: "Still thinking it over? Here are a few picks for you."
6. For the others, add an [In-app element](/product/customer-journey/journey-elements/channels/in-app/) with the same reminder and set **In-app expiration** to 1 day.
7. On the canvas, click **Settings** and select [**Conversion goals**](/product/customer-journey/journey-settings/#conversion-goals).
8. In the goal, choose `Order placed` and select **End journey after this event**.

## Cart abandonment

* **Use it when:** a shopper adds a product to the cart and leaves without ordering.
* **Starts when:** a shopper adds a product to the cart (`Product added to cart`).
* **What it does:** waits 1 hour for an order. If none arrives, sends a push with the product name. If the shopper still has not ordered after 1 day, sends a push with an offer.
* **Content to prepare:** two push presets with a deep link to the cart, one reminder without a discount and one with the offer, and an in-app template with a reminder for shoppers without push. Add a [Dynamic content](/product/personalization/dynamic-content/) placeholder for the product name to the reminder preset.
* **Needs:** the `Product added to cart` and `Order placed` events, with `product_name` on the first one.

<img src="/industry-playbooks-ecommerce-6.webp" alt="Cart abandonment journey: cart entry, 1-hour wait, Reachability check, push or in-app, 1-day wait, offer push"/>

1. On the journey canvas, add a [Trigger-based entry](/product/customer-journey/journey-elements/entry-elements/trigger-based-entry/) on `Product added to cart`.
2. Add a [Wait for Trigger](/product/customer-journey/journey-elements/flow-controls/wait-for-trigger/) step on `Order placed` and set the waiting period to 1 hour. Leave the **Trigger group 1** branch empty.
3. On the **Not triggered** branch, add a [Reachability check](/product/customer-journey/journey-elements/flow-controls/reachability-check/).
4. For shoppers reachable by push, add a [push](/product/customer-journey/journey-elements/channels/push/) with the reminder preset, which names the product, for example: "Your Linen shirt is still in the cart." To insert the name, turn on **Personalise message with event attributes** on the push step, and under **Overwrite personalization** map the preset placeholder to the `product_name` attribute of `Product added to cart`.
5. For the others, add an [In-app element](/product/customer-journey/journey-elements/channels/in-app/) with a general reminder, for example "Your cart is waiting for you.", and set **In-app expiration** to 1 day. The in-app element does not take event attributes, so it can't name the product.
6. After the push and the in-app, add a second [Wait for Trigger](/product/customer-journey/journey-elements/flow-controls/wait-for-trigger/) step on `Order placed` with a waiting period of 1 day. Leave its **Trigger group 1** branch empty.
7. On its **Not triggered** branch, add a [push](/product/customer-journey/journey-elements/channels/push/) with the offer, for example: "Complete your order today and get free shipping." Only shoppers who can get push receive the offer. To reach the others, add a [Reachability check](/product/customer-journey/journey-elements/flow-controls/reachability-check/) before the offer and an [In-app element](/product/customer-journey/journey-elements/channels/in-app/) with the same offer on its **All others** branch.
8. On the canvas, click **Settings** and select [**Conversion goals**](/product/customer-journey/journey-settings/#conversion-goals).
9. In the goal, choose `Order placed` and select **End journey after this event**.

A shopper who adds five products in a row starts the journey once, because a shopper who is in the journey does not enter it again. The reminder names the product from the first cart event.

## Wishlist back in stock

* **Use it when:** a shopper saved a product that was out of stock and you want to bring them back when it returns.
* **Starts when:** your server sends `Product back in stock` for a shopper who saved the product.
* **What it does:** sends one push that names the product and opens the wishlist.
* **Content to prepare:** a push preset with a deep link to the wishlist and a [Dynamic content](/product/personalization/dynamic-content/) placeholder for the product name, and an in-app template for shoppers without push.
* **Needs:** the `Product back in stock` event. Your store keeps the wishlists, so your server sends this event for each shopper whose wishlist holds the product.

<Aside type="caution" icon="setting" title="Developer assistance needed">
Your server sends `Product back in stock` for each shopper who saved the product. The event carries the shopper's `userId` and the `product_id` and `product_name` attributes. See [Events for developers](/developer/guides/audience-and-segmentation/events/).
</Aside>

<img src="/industry-playbooks-ecommerce-7.webp" alt="Wishlist back in stock journey: Product back in stock entry, Reachability check, push or in-app"/>

1. On the journey canvas, add a [Trigger-based entry](/product/customer-journey/journey-elements/entry-elements/trigger-based-entry/) on `Product back in stock`.
2. Add a [Reachability check](/product/customer-journey/journey-elements/flow-controls/reachability-check/). For shoppers reachable by push, add a [push](/product/customer-journey/journey-elements/channels/push/) with this preset, for example: "Linen shirt is back in stock." To insert the name, turn on **Personalise message with event attributes** on the push step, and under **Overwrite personalization** map the preset placeholder to the `product_name` attribute of `Product back in stock`.
3. For the others, add an [In-app element](/product/customer-journey/journey-elements/channels/in-app/) with a general text, for example "A product from your wishlist is back in stock.", and set **In-app expiration** to 1 day.
4. On the canvas, click **Settings** and select [**Conversion goals**](/product/customer-journey/journey-settings/#conversion-goals).
5. In the goal, choose `Order placed` and select **End journey after this event**.

Use the same journey for price drops. Ask your developers to send a `Product price dropped` event with `product_id`, `product_name`, and `price`, and copy the journey with this event as its entry.

<Aside type="tip" title="Other ways to message about restocks and price drops">

* **One request for all shoppers:** a restock or a price drop reaches Pushwoosh from your server. Instead of an event for each shopper, your developers can start the journey once per restock with an [API-based entry](/product/customer-journey/journey-elements/entry-elements/api-based-entry/). The request lists the User IDs of the shoppers who saved this product and passes the product name to the message. Only shoppers whose devices have a push token enter, and an entry accepts one request a minute, so restocks that come together go in one request or a minute apart.
* **Restocked products for a wider audience:** use a [product recommendations preset](/product/content/push-presets/build-push-content-from-a-feed/) with the **Back in stock** or **Price drop** strategy. It fills the push with such products from your [Product catalog](/product/content/product-catalog/), not with the product that a particular shopper saved. It does not send anything by itself, so use it in a journey or a campaign. The catalog marks a product as restocked or cheaper when an update of your product feed shows the change. **Back in stock** needs stock levels in the feed, and **Price drop** needs prices.

</Aside>