Reviews, offers and automations
Support is where users are most open to talking to you. Hollo will help you turn those moments into App Store ratings and upgrades, from the same chat. This page shows how each tool will work, so you can plan for it.
Review requests
A review card is a message in the chat with one button. Tapping it opens your app's page in the App Store, ready for a review.
- Send one from the inbox, into any conversation.
- Let an automation send it, for example a few days after someone finishes onboarding.
- Let Hollo AI offer one when a conversation ends well.
The best moment is right after you've solved someone's problem. They've just had a good experience, and they're already talking to you.
Your dashboard shows how many cards were sent, how many were opened, and the open rate.
There's no code to write for review cards. Hollo knows your app's App Store page from your app's settings.
Offers
An offer card shows one of your paywalls inside the chat, for example a discount for someone who's about to cancel, or an upgrade for someone asking about a Pro feature. Tapping it opens your own paywall, so the purchase goes through your existing code.
Register your paywalls
Tell Hollo which paywalls your app can show. Each one gets an ID and a title that your team sees in the inbox and the user sees on the card. You can register up to 20.
Hollo.offers = [
HolloOffer(id: "pro_discount", title: "Pro, 50% off for 3 months"),
HolloOffer(id: "annual_upgrade", title: "Switch to yearly and save 40%"),
]
Show your paywall when a card is tapped
Hollo.onOffer = { offer in
showPaywall(id: offer.id) // your existing paywall code
}
In SwiftUI, a common pattern is to store the tapped offer in shared state and present your paywall as a sheet. HolloOffer is Identifiable by its id, so it works with .sheet(item:):
@Observable final class PaywallRouter {
var offer: HolloOffer?
}
struct RootView: View {
@Bindable var router: PaywallRouter
var body: some View {
ContentView()
.onAppear {
Hollo.onOffer = { offer in router.offer = offer }
}
.sheet(item: $router.offer) { offer in
PaywallView(offerID: offer.id) // your existing paywall
}
}
}
Send it
Send an offer from the inbox, from an automation, or let Hollo AI offer it when it fits the conversation.
Ready-made adapters will connect paywalls from RevenueCat, Superwall, Adapty and StoreKit, so you don't have to write onOffer by hand. Once a user owns the product, the card greys out.
Your dashboard shows how many offers were sent, opened and purchased.
Automations
Automations start a conversation for you when something happens in your app or in a user's subscription.
| Part | Options |
|---|---|
| Trigger | An event your app sends, or a subscription event like a trial ending or a cancellation. |
| Audience | Everyone, subscribers or non-subscribers, plus up to 4 rules on attributes. Once per user, or every time. |
| Timing | Right away, after a delay, or at a local time of day. |
| Steps | Up to 8: open the chat, send a message, send an offer, send a review request, or wait. |
Automations skip users who are already in an active conversation, so nobody gets interrupted mid-question.
Send events from your app
Hollo.log(event: "finished_onboarding")
Pick event names you'll recognise later, in lowercase with underscores. Log the moments that matter for support or revenue, not every tap:
finished_onboardingexported_first_projecthit_free_limitcancelled_subscription(if you don't use a subscription integration)
Examples
- Trial check-in. Trigger: trial started. Wait 2 days, then send "How's it going? Anything we can help with?"
- Win-back. Trigger: subscription cancelled. Wait 1 day, then send a short message asking what was missing, followed by an offer.
- Review at the right time. Trigger:
exported_first_project, once per user. Wait 3 days, then send a review request.
Results
Each automation shows how many users it reached, how many opened the message, how many replied, and how many made a purchase within 7 days.
Good to know
- Subscription triggers need an integration, so Hollo hears about trials and cancellations.
- Be sparing. One well-timed message beats three. Users can always reply to an automated message, and that reply reaches your inbox like any other.