Project record / 04
Review and retention / DTC Shopify
Review Follow-Up Without Rating-Based Gating
The wait depends on what the customer bought. A low rating can start a recovery flow, but it never hides the public review link.



Problem
Ask too soon and the customer has nothing useful to say. The right wait also depends on the product.
Unhappy customers should never be steered away from the public review page that everyone else receives.
Solution and trade-off
I started the workflow from fulfilled Shopify orders and gave each product its own review and replenishment timing. The demo waits 10 days for a cleanser and 30 days for retinol.
Every rating keeps the same public Judge.me destination. Ratings from one to three can create a customer recovery email and an owner alert, but those are separate events with separate delivery states.
I chose that extra state on purpose. A combined event would be simpler, but a failed owner alert could force a repeated customer email.
How it was tested
Execution 66 sent and recorded the review request. Execution 67 sent one final reminder. Execution 68 claimed no work and never reached Gmail.
Strict copy validation rejected the model response, so the workflow used approved fallback. Execution 76 recorded the genuine two-star review and sent customer recovery.
The owner alert failed on its first attempt. Execution 83 skipped the completed customer event and sent only the missing alert. Execution 86 reconciled the final records to Google Sheets.
What passed
- The review request and final reminder each arrived once.
- The genuine review matched the correct customer, order, and product.
- Customer recovery and the owner alert each arrived once.
- Retrying the owner alert created no duplicate customer email.
- Reporting and restart persistence matched the database records.
LIVE TWO-STAR PATH PASSED · OWNER ALERT RETRY ISOLATED · REBOOT PERSISTENCE PASSED
Limits
The full low-rating path was tested live. The high-rating no-recovery path passed fixture and code tests rather than a second live order.
A client version needs its review provider, sender identity, timing rules, consent policy, and a named person to own recovery.
Starting price / USD
Final scope depends on catalog size, review provider, product timing, and recovery ownership.
Built with n8n, Shopify Admin GraphQL, Judge.me, PostgreSQL, Gmail, Google Sheets, OpenRouter
Fictional portfolio demonstration. Results come from controlled acceptance testing, not client revenue, conversion data, or a forecast.