Eight workflows. Every send checks: no sms-opted-out or email-unsubscribed, no pp-issue-open (an open issue silences everything commercial), inside the channel window, and within the global frequency budget shared with the cart build.
1. Order Intake and Delivery Tracking
Trigger: order-created webhook from the store.
Actions:
- Create the opportunity in Post-Purchase Lifecycle at Order Placed, named [Order ID]: [Primary Product Purchased]. Write Last Order ID, Last Order Date, Last Order Value, Primary Product SKU, Primary Product Category.
- Look up Product Review Delay Days and Product Replenishment Days from the SKU table. If the SKU has no replenishment value, apply pp-durable and skip workflows 5 and 6 entirely for this order.
- Apply post-purchase-active. Branch: Lifetime Order Count = 0 → pp-first-order; 1 or more → pp-repeat-customer; Lifetime Order Value above the VIP threshold → pp-vip.
- On dispatch webhook: move to In Transit. Tracking notifications are handled by the order-notification setup, not here: do not duplicate them.
- On delivery webhook: move to Delivered, stamp Delivery Confirmed Date, compute Calculated Reorder Date = delivery date + Product Replenishment Days − 5 days.
- No delivery confirmation after the expected window plus 3 days: apply pp-issue-open, Issue Category = Late Delivery, create a task on fulfillment, and send the customer a proactive note: “Your order looks like it's running late according to the carrier. We're chasing it. You don't need to do anything, but reply if you'd rather we just resend it.” Getting ahead of a late parcel converts a complaint into loyalty; waiting for the customer to notice does the opposite.
Exit: order refunded or canceled, which removes post-purchase-active and closes the card.
2. Arrival Message and Settling-In Hold
Trigger: stage changes to Delivered.
Actions:
- Wait 4 hours. Long enough that the parcel has been opened, short enough that it is still the day's event.
- Send the arrival message by email. No offer, no cross-sell, no review request. pp-first-order version: “Your [Primary Product Purchased] arrived today: thanks for giving us a go. One thing worth knowing: [the single most common usage mistake for this category]. Anything you're unsure about, just reply to this, it comes to a real inbox.” pp-repeat-customer version: two lines, no onboarding content.
- Move to Settling In. Send nothing further until Product Review Delay Days has elapsed from Delivery Confirmed Date.
- Branch: pp-durable with an assembly or setup requirement: add one setup-help email at 48 hours with the instructions and a link to book a support call. This is where not as described reviews come from, and a timely email prevents a fair number of them.
- Branch: pp-vip: additionally create a task for the owner or account manager to send a personal note within 2 business days. Automate the reminder, not the note.
Exit: any inbound message (hand to workflow 7), or the review delay elapsing.
3. Satisfaction Check and Routing
Trigger: Delivery Confirmed Date + Product Review Delay Days.
Conditions: no pp-issue-open, no refund or return in progress, not email-unsubscribed.
Actions:
- Send the Satisfaction Check email. Subject: “How's the [Primary Product Purchased] working out?” Body: one line, then five tappable options, each a distinct tracked link. Nothing else. No offers, no footer promotions. One question, one tap.
- Branch: score 4 or 5: apply pp-promoter, write Satisfaction Score, move to Satisfaction Checked, hand to workflow 4.
- Branch: score 3: apply pp-passive. Show a single open question: “Thanks. What would have made it a 5?” Route the free-text answer to the product owner. Do not ask for a public review. A 3 produces a lukewarm review that costs more than no review. Continue to the reorder path.
- Branch: score 1 or 2: apply pp-detractor and pp-issue-open and pp-review-suppressed, move to Issue Raised, and hand to workflow 8 immediately. No further commercial message of any kind goes to this contact until the issue closes.
- No response after 3 days: one SMS reminder, if SMS consent exists: “Quick one: how did you get on with the [Primary Product Purchased]? Tap a number 1-5: [link]”
- No response after 3 further days: stop. Apply pp-review-declined, move to the reorder path. Two asks is the limit; a third makes the next email less likely to be opened.
Exit: any score recorded, or the second reminder lapsing.
4. Review Request and Platform Rotation
Trigger: pp-promoter applied.
Actions:
- Wait 2 hours after the satisfaction tap. Deliberate: two automated emails inside a minute reads as a machine and depresses response.
- Select the platform by rotation, weighted toward the profile with the fewest reviews in the last 90 days, excluding any platform this contact has already reviewed on.
- Move to Review Requested, apply pp-review-requested. Send: “Really glad the [Primary Product Purchased] is working out. If you've got two minutes, a few words about it genuinely helps the next person deciding, and it helps us know what to make more of: [review link]. No pressure either way.”
- The landing page lists each purchased item with its own review link, plus a tick box: happy for us to quote this. Permission is captured here, not assumed later.
- Wait 3 days. Condition: no review left? One reminder, by the same channel, shorter, with the link only.
- Wait 4 days. Condition: still none? Stop and apply pp-review-declined. One request and one reminder. A promoter who did not review is still a promoter and should not be pestered into resentment.
- On a review being left: write Review Left, Review Platform, Review Rating Public; apply pp-review-left; cancel the reminder; draft a reply to the review and queue it for human approval; and if the quote permission was given and the rating is 4 or 5, add it to the social planner queue for scheduling.
- If a public review comes in at 3 or below despite the private routing: alert the owner immediately, draft a reply, hold for approval, and open an issue. Something in the gap between the private check and the public review needs understanding.
Exit: review left, or the reminder lapsing.
5. Replenishment Timing and Reorder Prompt
Trigger: Calculated Reorder Date reached.
Conditions: pp-consumable, no pp-issue-open, no active subscription for this SKU, no order containing this SKU since Last Order Date, Reorder Prompt Count for this cycle = 0.
Actions:
- Move to Replenishment Window, apply pp-reorder-due.
- Use the better estimate: if Lifetime Order Count is 3 or more and Average Days Between Orders exists, that value overrides the SKU default for this contact. Their behavior beats your table.
- Prompt one, email: “Going by a normal [Product Replenishment Days] days, you're about five days off running out of [Primary Product Purchased]. One tap puts the same order through: [reorder link]. If you're using it slower than that, tell me and I'll shift the reminder.” The invitation to correct the timing is the most valuable sentence in the build. Set Reorder Prompt Count = 1, stamp Reorder Prompt Last Sent.
- Wait 3 days. Condition: no order and no reply? Prompt two, SMS. The only SMS in this workflow, mid-morning, inside the window: “[First Name]: running low on [Primary Product Purchased]? Same order, one tap: [link]. Reply STOP to opt out.” Reorder Prompt Count = 2.
- Wait 5 days. Condition: no order? Prompt three, email, final: the reorder link plus the subscription option framed as never having to think about it again. Reorder Prompt Count = 3. This is the cap; there is no fourth.
- Wait 14 days. Condition: no order? Move to Lapsed, apply pp-lapsed, remove pp-reorder-due, and hand to the win-back program. Do not loop this workflow. A customer who ignored three prompts needs a different conversation, not the same one again.
Exit immediately on: any order containing the SKU, any reply, subscription started, or pp-issue-open.
6. Reorder Attribution and Subscription Offer
Trigger: order-created webhook containing a SKU with an open pp-reorder-due card.
Actions:
- Move the old card to Reordered, apply pp-reordered, and attribute to the prompt channel and number from Reorder Prompt Last Sent.
- Cancel every pending prompt. Increment Lifetime Order Count, add to Lifetime Order Value, and recompute Average Days Between Orders from the actual interval.
- Swap pp-first-order for pp-repeat-customer if present.
- Open a new lifecycle card on the new order via workflow 1, with the review request suppressed for any SKU this contact has already reviewed. Asking twice for a review of the same product is the quickest way to look automated.
- Branch: second or later reorder of the same SKU and no subscription: apply pp-subscription-candidate. Wait 2 days after delivery of that order, then send the subscription offer once: “You've reordered the [Primary Product Purchased] a few times now: want it to just turn up every [interval] instead? You can skip, pause or cancel any time, in two taps.” The cancellation ease is stated up front because it is the actual objection.
- If the offer is declined or ignored for 14 days: stamp Subscription Declined Date and suppress the offer for 12 months. Once.
- Branch: subscription started: remove this contact from workflow 5 entirely for that SKU and hand to the subscription lifecycle. A subscriber receiving reorder prompts is the clearest possible sign nobody is watching.
Exit: on completion.
7. Reply Handling and BO Post-Purchase Support
Trigger: inbound reply on any channel from a contact carrying post-purchase-active, or a web chat from a known customer.
Actions:
- Pause every scheduled step on this contact's cards immediately.
- Hand to BO with the usage, care, guarantee, returns and subscription knowledge base, plus live order and tracking status.
- Branch: usage or care question: BO answers from the knowledge base, strictly within what the label and documentation say. On anything ingestible, applied to the body, or safety-related, BO gives the label position and then escalates rather than elaborating.
- Branch: “still have plenty left” or “ran out already”: BO acknowledges, adjusts Product Replenishment Days for this contact by the stated difference, recomputes Calculated Reorder Date, and confirms the new timing. This is the self-calibration loop and it should be built on day one, not bolted on.
- Branch: order or tracking question: BO reads the live status and answers. If the carrier shows no movement for 3 days, BO opens an issue rather than repeating the tracking page back at the customer.
- Branch: wants to reorder: BO builds the previous basket and sends the one-tap link.
- Branch: wants to pause, skip or cancel a subscription: BO does it, immediately, without a retention attempt. One optional question afterwards about why. Friction here produces chargebacks and public reviews.
- Escalation: any of refund, chargeback, damaged, injured, reaction, allergic, ill, faulty, unsafe, legal, lawyer or complaint; a compensation request; a second message about the same unresolved issue; pp-vip; or two stalled turns → assign to a named human with the full thread. Anything suggesting harm from a product notifies immediately and bypasses every queue.
- Resume paused steps only after resolution, and only if at least 48 hours have passed.
Exit: resolution, or human takeover.
8. Issue Resolution and Service Recovery
Trigger: pp-issue-open applied, by a detractor score, by BO, or by hand.
Actions:
- Suppress every commercial workflow for this contact: reviews, reorders, subscription offers, cross-sells, and any broadcast. One switch, checked everywhere.
- Move to Issue Raised. Create an urgent task on the customer-service owner, due in 4 business hours, carrying Issue Category, the free text, the photos and the desired outcome from the Issue Report form.
- Acknowledge within 15 minutes, automatically, naming a person: “Thanks for telling us: that's not the experience we want you to have. [Name] from our team is looking at this now and will come back to you today. You don't need to do anything else.” Speed of acknowledgement matters more here than speed of resolution.
- Branch: Damaged, Wrong Item or Missing Parts: route to fulfillment, pre-draft the replacement or returns options for the human to approve, and include the photos. BO does not authorize; it prepares.
- Branch: Late Delivery: route to fulfillment with the carrier status attached.
- Branch: Quality, Not As Described or Sizing: route to the product owner as well as service, because this is product feedback wearing a complaint's clothes.
- Branch: any mention of harm, injury, reaction or safety: notify a named senior person immediately by push and SMS, bypass the queue, and log it separately for whatever incident process the business is required to follow. Do not send any automated message beyond the acknowledgement.
- Wait 4 business hours. Condition: task not actioned? Escalate to the manager. Wait 4 further hours: escalate to the owner. An unresolved complaint is the most expensive object in the business.
- On resolution: apply pp-issue-resolved, stamp Issue Resolved Date, remove pp-issue-open, move to Satisfaction Checked.
- Wait 5 days after resolution. Send one follow-up asking whether the fix landed. Nothing commercial attached.
- Branch: the follow-up comes back positive: after a further 7 days, and only then, the review request may be re-enabled by a human decision. Never automatically. A recovered customer is often the most willing reviewer there is, but that ask has to be a judgment, not a trigger.
- Resume commercial workflows 14 days after resolution, starting with the reorder path and never with a review request.
Exit: issue resolved and the 14-day cooling-off elapsed.