How to Create Automated Review Request Campaigns
Ask happy customers for reviews automatically at the right moment.
Jay Banlasan
The AI Systems Guy
When you automate review request campaigns via email and sms, you stop relying on customers to remember. I build these with a key twist: only ask customers who had a positive experience. Sending review requests to everyone is how you get negative reviews you could have avoided.
The system triggers after a successful transaction, filters by satisfaction signal, and sends a personalized request at the optimal time.
What You Need Before Starting
- Customer transaction data with email and phone
- Python 3.8+ with SMTP and SMS capabilities
- A satisfaction signal (CSAT score, support ticket status, repeat purchase)
- Direct review links for Google, Yelp, or Facebook
Step 1: Build the Trigger Logic
Only request reviews from happy customers:
def should_request_review(customer_id):
recent_tickets = get_recent_tickets(customer_id, days=30)
negative_tickets = [t for t in recent_tickets if t["sentiment"] == "negative"]
if negative_tickets:
return False
csat = get_latest_csat(customer_id)
if csat and csat < 4:
return False
already_requested = check_recent_request(customer_id, days=90)
if already_requested:
return False
return True
Step 2: Generate Personalized Requests
import anthropic
client = anthropic.Anthropic()
def generate_review_request(customer, transaction):
response = client.messages.create(
model="claude-sonnet-4-20250514",
max_tokens=200,
messages=[{
"role": "user",
"content": f"""Write a short, personal review request email.
Customer name: {customer['name']}
Service/product: {transaction['description']}
Date: {transaction['date']}
Business name: [Your Business]
Rules:
- Under 80 words
- Reference their specific purchase/service
- Make it easy (include the direct link)
- Do not beg or over-ask
- Casual, grateful tone"""
}]
)
return response.content[0].text
Step 3: Set Up the Review Link Router
Route customers to the platform where you need reviews most:
REVIEW_LINKS = {
"google": "https://g.page/r/YOUR_PLACE_ID/review",
"yelp": "https://www.yelp.com/writeareview/biz/YOUR_BIZ_ID",
"facebook": "https://www.facebook.com/YOUR_PAGE/reviews"
}
def get_review_link(customer_id):
"""Route to the platform with the fewest recent reviews."""
counts = get_platform_review_counts(days=30)
lowest = min(counts, key=counts.get)
return REVIEW_LINKS[lowest]
Step 4: Send via Email and SMS
import smtplib
from email.mime.text import MIMEText
import requests
def send_email_request(email, name, message, review_link):
full_message = f"{message}\n\nLeave your review here: {review_link}"
msg = MIMEText(full_message)
msg["Subject"] = f"How was your experience, {name}?"
msg["From"] = "[email protected]"
msg["To"] = email
with smtplib.SMTP("smtp.gmail.com", 587) as server:
server.starttls()
server.login("[email protected]", os.getenv("EMAIL_PASSWORD"))
server.send_message(msg)
def send_sms_request(phone, name, review_link):
message = f"Hi {name}, thanks for choosing us! If you have a moment, we would love your feedback: {review_link}"
# Send via Twilio or your SMS provider
requests.post("https://api.twilio.com/2010-04-01/Accounts/{sid}/Messages.json",
auth=(os.getenv("TWILIO_SID"), os.getenv("TWILIO_TOKEN")),
data={"To": phone, "From": os.getenv("TWILIO_NUMBER"), "Body": message})
Step 5: Schedule and Track
from datetime import datetime, timedelta
def schedule_review_requests():
"""Run daily. Find eligible customers from yesterday's completed transactions."""
yesterday = (datetime.now() - timedelta(days=1)).strftime("%Y-%m-%d")
transactions = get_completed_transactions(yesterday)
sent = 0
for txn in transactions:
customer = get_customer(txn["customer_id"])
if should_request_review(customer["id"]):
review_link = get_review_link(customer["id"])
message = generate_review_request(customer, txn)
send_email_request(customer["email"], customer["name"], message, review_link)
log_request(customer["id"], "email", review_link)
sent += 1
return {"sent": sent, "eligible": len(transactions)}
What to Build Next
Add A/B testing on request timing. Test sending requests 1 day, 3 days, and 7 days after the transaction. Track which timing generates the highest review completion rate for your specific business.
Related Reading
- AI for Email Marketing Automation - email automation patterns for review campaigns
- The Feedback Loop That Powers Everything - review requests closing the customer feedback loop
- The Measurement Framework That Actually Works - measuring review campaign effectiveness
Want this system built for your business?
Get a free assessment. We will map every system your business needs and show you the ROI.
Get Your Free Assessment