Your company category
Every company has a category: SaaS, Content, Ecommerce, Offline business, Mobile app or Other. It decides which templates are recommended and how AI writes for you.- Detected from your website. When you add a company, Sequenzy reads your site. It classifies it as a mobile app when your homepage links to your App Store or Google Play listing and the site has one more app marker: a smart app banner, an
apple-app-site-associationorassetlinks.jsonfile that names your app, anapp-ads.txtfile, or listings in both stores. A site with a web sign-in counts as web software unless it also runs a RevenueCat, Superwall or Adapty web SDK, because many SaaS products link to a companion app. - Chosen by you. Tick It’s a mobile app when you add the company, or change Category under Settings > Product info. Your choice is never overwritten by detection.
- Suggested by integrations. Connecting RevenueCat, Superwall or Adapty offers to switch the category to Mobile app.
websiteType and websiteTypeSource with Get Company and set it with Update Company. With the CLI, use sequenzy companies update <id> --category mobile_app; with MCP, update_company with websiteType.
The journeys
Each journey starts on an event Sequenzy already receives. RevenueCat, Superwall and Adapty all send the samesaas.* events, so the journeys work with any of them.
Stops are events, so the journeys work whether or not your workspace uses tag sync rules. Turning auto-renew back on in RevenueCat, Superwall or Adapty sends
saas.uncancelled, and Cancellation Save ends before its next message, even when the store reports the change late. Someone who turns auto-renew back on and then cancels again while the journey is still running is not sent the rest of it; they can enter again after it ends.
Trial to Paid times its reminder to one day before the event’s trialEndsAt, Cancellation Save to two days before cancelsAt, and the renewal reminder to seven days before periodEnd. A contact whose event has no such date leaves the journey instead of getting a reminder at the wrong time.
New Install Onboarding starts when a contact is added through Add Subscriber or an import or integration that runs automations. The SDK’s identify links a device to a contact without starting automations, so call Add Subscriber from your signup flow.
Paywall Viewed needs your app to send a paywall_viewed event with the mobile SDK; with Superwall, forward its paywallOpen delegate event under that name. Lapsed User Re-Engagement needs screen tracking from the SDK.
How a journey is built
- Push first, email as fallback. Most journeys branch on Reachable by push: an active device on a platform you have set up (APNs, FCM or web push). Those contacts get push and in-app messages; everyone else gets email. In New Install Onboarding, Trial to Paid, Expired Subscription Win-Back and Lapsed User Re-Engagement, the check runs when the first push or email is due, not when the contact enters, so a user who allows notifications during their first session still gets push. Paywall Viewed and Cancellation Save check when the contact enters, because their first push and first email are due at different times. Once decided, a contact stays on that path for the rest of the journey. In-app messages reach both groups the next time the app opens. Billing Issue Recovery and the Annual Renewal Reminder are service notices, so everyone gets their emails, and their push steps simply skip contacts push cannot reach.
- Quiet hours. Every wait ends between 09:00 and 21:00 in each contact’s own timezone, so a push never lands at night. A contact without a timezone uses the one their app reported when it registered for push, and UTC when neither is known.
- Frequency cap. Email steps respect your frequency cap. Push and in-app steps are not counted against it.
- Superwall offers. Win-back and paywall in-app messages carry
superwall_placementin their data (winback_offerorpaywall_reminder). Read it in your in-app delegate and callSuperwall.register(placement:)to show the offer.
sequenzy sequences templates and sequenzy sequences create-from-template <templateId>; with MCP, list_sequence_templates and create_sequence_from_template.