Outroユーザーガイド
Outroの使い方を完全に解説 - ブランド化されたキャンセルページの作成から、収集した退会インタビューの活用まで。
Outroへようこそ
Outroはキャンセルフローを音声退会インタビューに変えます。ブランド化されたキャンセルページを作成し、「サブスクリプションをキャンセル」ボタンをそこに向け、解約するすべての顧客にキャンセル前に一つの質問をします。
各音声回答は自動的に文字起こしされ、あなたの言語に翻訳され、感情がスコアリングされ、テーマでタグ付けされます。すべてがダッシュボードに集約され、週次ダイジェストにまとめられます - 人々がなぜ去るのか、単に去ったというだけでなく、理由がわかります。
学ぶこと
- 数クリックでブランド化されたキャンセルページを作成する方法。
- ロゴ、色、質問プロンプト、ボタンコピーを設定する方法。
- 解約する顧客を取り戻すリテンションオファーを追加する方法。
- ページを埋め込むか、キャンセルボタンをそこに向けて顧客をリダイレクトする方法。
- StripeとLemon Squeezyを接続し、すべてのキャンセルにリスクのあるプランとMRRを持たせる方法。
- 回答を読み、収益回復で保存したMRRと失ったMRRを追跡する方法。
- AIサマリーと週次キャンセルダイジェストが顧客の発言をどのように要約するか。
- チーム、プラン、請求を管理する方法。
クイックスタート - 5分でライブ
ざっと見たい方のために、サインアップから実際の退会インタビューを収集するまでの最短ルートを紹介します。
アカウントを作成
ランディングページでサインアップをクリックし、メールアドレスを入力、パスワードを設定し、送信されたメールで確認します。すべてのアカウントは14日間のトライアルから始まります。
キャンセルページを作成
ダッシュボードからキャンセルページ → 新しいページに移動し、スラッグを選択(ページはoutro.so/c/your-slugにあります)、解約する顧客に答えてほしい質問を一つ書きます。
ブランディング (オプション)
ロゴ、ブランドカラー、ページタイトル、ボタンコピーを追加します。後でいつでも調整可能です - ライブページは即座に更新されます。
請求プロバイダーを接続 (オプション)
アカウント設定 → 統合でStripeまたはLemon Squeezyを接続します。Outroはその後、顧客のプラン、サブスクリプション年齢、リスクのあるMRRをすべてのキャンセルに添付します - これにより、解約を単なる数ではなく金額で測定できます。
キャンセルフローを接続
ページをアプリに埋め込むか、既存の「サブスクリプションをキャンセル」ボタンをOutroリンクに向け、許可されたリターンドメインを設定して顧客がキャンセルを完了するために戻るようにします。
回答が集まるのを見守る
各回答は回答タブに表示され、自動的に文字起こしされ、スコアリングされます。収益回復は保存したMRRと失ったMRRを追跡し、キャンセルダイジェストが毎週月曜日に受信箱に届きます。

キャンセルページの作成
キャンセルページは、顧客がキャンセルをクリックしたときに表示されるブランド化された画面です。プランが許す限りいくつでも持つことができます - 例えば、製品ごとやプラン階層ごとに異なるページを持ち、それぞれに独自の質問を設定できます。
1. キャンセルページを開く
サイドバーからキャンセルページをクリックします。所有するすべてのページが表示され、それぞれの公開URL、ライブ/無効状態、クイックアクションが表示されます。

2. 必要事項を記入
エディタにはいくつかのフィールドがあります。スラッグのみが必須です - 他は適切なデフォルトが設定されています:
- スラッグ - 公開URLは
outro.so/c/{slug}です。小文字、数字、ダッシュを使用。 - ページタイトル - 例: "お別れは寂しいです"。
- 質問プロンプト - 顧客が音声で答える唯一の質問、例: "キャンセルする主な理由は何ですか?"
- スキップ / 続行ボタンのテキスト - スキップおよびキャンセル継続ボタンのコピー。

ページのブランディング
ページは当社ではなく、あなたの製品らしく見えるべきです。外観タブで見た目を調整できます。レイアウト(フルページ、分割、カード)を選び、背景、ブランドカラー、カードのスタイル、ロゴを設定すると、変更は即座にプレビューに反映されます。
ロゴ & ブランドカラー
ホストされたロゴURLを貼り付けてページの上部にマークを表示し、カラーピッカーでブランドカラーを選択(または16進数値を貼り付け)。この色はアクセントバー、ボタン、録音コントロールに影響します。

ライブ切り替え
ページがライブのトグルは公開URLが応答するかどうかを制御します。削除せずにページをオフにするにはこれをオフにします(およびその回答)。
リテンションオファー
キャンセルは必ずしも最終的なものではありません。顧客が質問に答えた後、Outroはリテンションオファーを表示できます - 滞在するための最後のチャンスのインセンティブ。一部の顧客はそれを受け入れ、残りは通常通りキャンセルします。どちらにしても何かを学びます。
ページエディタのオファータブを開き、リテンションオファーを有効にするをオンにします。フローはシンプルです: 彼らがフィードバックを提供 → あなたがオファーを表示 → 彼らが滞在またはキャンセル。

オファーの種類
- 割引 - クーポンコード(例: "3ヶ月間50%オフ")を顧客がコピーしてチェックアウトで適用、オプションで請求リンクを追加。
- サブスクリプションの一時停止 - キャンセルせずにアプリ内の一時停止ページに送る。
- プランのダウングレード - プランページへのリンクを提供し、より安価な階層に移動できるようにする。
- サポートに連絡 - 保存可能な顧客をメールまたはサポートリンクを通じて人間にルート。
理由に合わせたオファーのターゲティング
各オファーは特定のキャンセル理由をターゲットにすることができ、マッチする方法は2つあります:
- 選択したものによる - フォームで訪問者が選択した回答にマッチ(例: "高すぎる"ラジオオプション)。
- 発言による - 訪問者が音声回答を録音し、オファーが有効な場合、Outroはそれを文字起こしし、AIを使用して実際の解約理由を検出します(高すぎる、機能不足、使用していない、使いにくい、技術的問題、切り替え)。その後、実際に言ったことにマッチするオファーを表示します。これはインラインで行われ、訪問者は分類中に「最適なオプションを見つける」短いポーズを見ます。
Outroはどちらのシグナルにもマッチする最初のオファーを表示します。マッチしない場合は、理由が選択されていない最初のオファーを表示します(キャッチオール)。価格が高すぎると言った顧客は、フォームに触れなくても割引を受け、"機能が不足している"はサポートにルートされます。フォームの回答と音声で検出された理由を同じオファーに混ぜることができ、Outroは両者をマッピングするため、フォームラベルに設定されたオファーは同等の発言理由にもマッチします。
キャンセルフローの接続
Outroをキャンセルする顧客の前に置く方法は2つあります。アプリに合ったものを選んでください:
- 埋め込む - 既存のキャンセル画面にiframeと数行のスクリプトをドロップします。ページは自動でサイズを調整し、顧客がオファーを受け入れたときにアプリに通知します。
- リンクする - 「サブスクリプションをキャンセル」ボタンをホストされたOutro URLに向け、Outroが顧客を戻してキャンセルを完了させます。
オプションA - ページを埋め込む
エディタの Integration タブ(Inline embed ブロック)からスニペットをコピーし、解約フローのある場所に貼り付けます。これは2つのメッセージを受信します。resize イベント(iframe の高さを自動調整)と offer_accepted イベント(請求システムでリテンションオファーを適用)です。
iframe URLにuser_id(およびオプションでexternal_ref)をリンクと同様に追加します - 埋め込まれたキャンセルは同じ方法で請求顧客にマッチし、スナップショットされたプランとMRRが正確になります。
<iframe src="https://outro.so/c/your-slug?embed=1&user_id=USER_ID&external_ref=REF"
id="outro-embed"
style="border:0;width:100%;display:block;min-height:320px"
title="Cancellation"></iframe>
<script>
window.addEventListener('message', function (e) {
if (e.origin !== 'https://outro.so') return;
var d = e.data;
if (!d || d.type !== 'outro-embed') return;
if (d.kind === 'resize') {
var f = document.getElementById('outro-embed');
if (f) f.style.height = d.height + 'px';
}
if (d.kind === 'offer_accepted') {
// d.offer = pause|downgrade|discount|contact, d.responseId
// Apply the offer in your billing system here.
if (d.offerUrl) window.location.href = d.offerUrl;
}
});
</script>オプションB - 統合リンク
エディタが生成するリンクをコピーできます。次のようになります:
outro.so/c/your-slug?return_url=https://app.acme.com/cancel/done&user_id=USER_ID&external_ref=REF- return_url - 回答後に顧客を送る場所。許可されたリターンドメイン上でなければなりません。
- user_id - 顧客の独自の識別子。戻ってきて回答をアカウントにマッチさせるために使用されます。
- external_ref - 添付したい追加のコンテキスト(プラン、MRR、サインアップ日)。回答と一緒に保存されます。
リダイレクトバック
顧客が回答を録音した後(またはスキップ/続行ボタンをクリックした後)、Outroはreturn_urlに2つのクエリパラメータを追加して送信し、アプリがキャンセルを完了できるようにします:
https://app.acme.com/cancel/done?outro_response_id=...&user_id=USER_ID許可されたリターンドメイン
エディタで許可されたリターンドメインを設定します(例: acme.com)。Outroはそのホストまたはそのサブドメインにのみリダイレクトします。
return_urlは設計上拒否され、誰もリダイレクトをハイジャックできません。請求システムでのオファーの適用
受け入れられたオファーを適用する方法は2つあります。自動 - 設定で請求プロバイダー(StripeまたはLemon Squeezy)を接続し、オファーで「自動適用」をオンにします。Outroが割引、停止、またはダウングレードを適用します。手動 - Outroはあなたのアプリに信号を送り、以下のコピーペースト用の接着剤を使用して自分で保存を行います。自動には書き込みアクセス権を持つAPIキーが必要ですが、手動には必要ありません。
どのキーが必要ですか?
- Stripe - 読み取り専用の制限付きキーがインサイト(リスクのあるMRR)を提供します。オファーを自動適用するには、サブスクリプションとクーポンの書き込み、および製品と価格の読み取り権限が必要です(ダウングレード用)。シークレットキーも使用可能ですが、制限付きキーの方が安全です。
- Lemon Squeezy - APIキーはフルアクセスであるため、同じキーでインサイトを提供し、一時停止とダウングレードオファーを自動適用します。Lemon Squeezy APIでは既存のサブスクリプションに割引を適用できないため、割引オファーは自動適用されず、クーポンコードがお客様に表示されます。
2つのシグナル
- 埋め込まれたページ -
offer_acceptedポストメッセージでofferがdiscount、pause、downgradeまたはcontactに設定され、responseIdが含まれます。 - ホストされたページ - アプリに戻るリダイレクトには
outro_offer=<type>がoutro_response_idとあなたのuser_idと一緒に含まれます。
いずれにせよ、シグナルを1つのサーバーサイドエンドポイントにルートし、そこで実行します:
// Your cancel/done page (or the embed's message handler) calls this:
// POST /api/retention/fulfill { userId, offer, responseId }
app.post('/api/retention/fulfill', async (req, res) => {
const { userId, offer, responseId } = req.body
const customer = await db.customers.findByExternalId(userId)
switch (offer) {
case 'discount': await applyDiscount(customer); break
case 'pause': await pauseSubscription(customer); break
case 'downgrade': await downgradePlan(customer); break
case 'contact': await notifySupport(customer, responseId); break
}
res.json({ ok: true })
})outro_offerパラメータとポストメッセージはブラウザから来ます - 誰でもクエリ文字列を入力できます。実行する前に、顧客が実際にあなたの記録でキャンセル中であることを確認し、引き換えを制限します(例: 顧客1人あたり年間1つのリテンション割引)。Stripeレシピ
公式のstripeノードライブラリと顧客のサブスクリプションIDを使用して:
// Discount - e.g. a "40% off for 3 months" coupon you created in Stripe
async function applyDiscount(customer) {
await stripe.subscriptions.update(customer.stripeSubscriptionId, {
discounts: [{ coupon: 'SAVE40_3MO' }],
})
}
// Pause - stop charging, auto-resume in 2 months
async function pauseSubscription(customer) {
const resumesAt = Math.floor(Date.now() / 1000) + 60 * 60 * 24 * 60
await stripe.subscriptions.update(customer.stripeSubscriptionId, {
pause_collection: { behavior: 'void', resumes_at: resumesAt },
})
}
// Downgrade - move the subscription item to a cheaper price
async function downgradePlan(customer) {
const sub = await stripe.subscriptions.retrieve(customer.stripeSubscriptionId)
await stripe.subscriptions.update(sub.id, {
items: [{ id: sub.items.data[0].id, price: 'price_starter_monthly' }],
proration_behavior: 'create_prorations',
})
}Lemon Squeezyレシピ
Lemon SqueezyはプレーンRESTを使用します(PATCH /v1/subscriptions/:idとAPIキー)。1つの特徴: LSはライブサブスクリプションに割引コードを添付できません - 「割引」オファーの場合、顧客を同じプランの割引バリアントに切り替えます。
const LS = 'https://api.lemonsqueezy.com/v1'
const headers = {
Authorization: `Bearer ${process.env.LEMONSQUEEZY_API_KEY}`,
'Content-Type': 'application/vnd.api+json',
Accept: 'application/vnd.api+json',
}
const patchSub = (id, attributes) =>
fetch(`${LS}/subscriptions/${id}`, {
method: 'PATCH',
headers,
body: JSON.stringify({ data: { type: 'subscriptions', id: String(id), attributes } }),
})
// "Discount" - move them to a discounted variant of their plan
async function applyDiscount(customer) {
await patchSub(customer.lsSubscriptionId, { variant_id: DISCOUNTED_VARIANT_ID })
}
// Pause - stop charging, auto-resume in 2 months
async function pauseSubscription(customer) {
const resumesAt = new Date(Date.now() + 1000 * 60 * 60 * 24 * 60).toISOString()
await patchSub(customer.lsSubscriptionId, {
pause: { mode: 'void', resumes_at: resumesAt },
})
}
// Downgrade - switch to the cheaper plan's variant
async function downgradePlan(customer) {
await patchSub(customer.lsSubscriptionId, { variant_id: STARTER_VARIANT_ID })
}請求統合
支払いプロバイダーを接続すると、Outroは「何人が解約した」から「どれだけのMRRが流出している」に変わります。接続されると、すべてのキャンセルは支払っている顧客にマッチし、彼らのプラン、サブスクリプション年齢、リスクのある月次収益でタグ付けされます。
アカウント設定 → 統合に移動します。OutroはStripeとLemon Squeezyをサポートしており、プロバイダーごとに複数のアカウントを追加できます - 複数のストアやエンティティを運営している場合に便利です。

接続の管理
- 接続を追加 - プロバイダーAPIキーを貼り付けます。Outroは顧客(メール、プラン、MRR、サブスクリプション開始)を取り込み、マッチングのためにキャッシュします。
- 今すぐ同期 - キャッシュされた顧客リストをオンデマンドで更新します。Outroはまた、日次スケジュールで再同期します。
- 切断 - その接続のキャッシュされた顧客を削除します。過去のキャンセルスナップショットはそのまま - 既に記録された数字は変わりません。
マッチングの仕組み
キャンセルが発生すると、Outroはuser_id / external_refで同期された顧客にマッチングします。マッチは回答にスナップショットとしてキャプチャされ、MRRの数字はキャンセル時の顧客の価値を反映します。
user_idを渡すと、最も信頼性の高いマッチングが得られます - これは正確であり、メールマッチングはアドレスが一致することに依存します。回答の読み取り
すべての回答は回答ビューに表示されます。音声回答は自動的に文字起こしされ、翻訳されるため、テキストのようにざっと読むことができます - そしてそれぞれが到着した瞬間にスコアリングされ、タグ付けされます。

各回答に含まれるもの
- 録音 & トランスクリプト: オリジナルの音声(再生可能)、オリジナル言語のトランスクリプト、翻訳が並んで表示。
- 感情 & テーマ: ポジティブ / ニュートラル / ネガティブ、価格設定、競合、機能不足などの自動検出テーマ。
- コンテキスト: 提出された日時、渡された
user_idとexternal_ref、言語/デバイスの詳細。
収益回復
請求プロバイダーが接続されると、収益回復ページは解約のドル価値を示します。ビジネスにとって実際に重要な質問に答えます: どれだけのMRRを回復し、どれだけを失ったか?

4つの数字
- リスクにさらされているMRR - 期間中のすべてのマッチしたキャンセルの総月次収益。
- 回復済みMRR - オファーを受け入れた顧客からの収益で、請求プロバイダーでまだサブスクライブされていることが確認されたもの。これはオファークリックだけでなく、確認されたリテンションです。
- 確認待ち - 最近オファーを受け入れた顧客; 猶予期間が過ぎ、まだ支払いが確認された場合にのみ回復済みとしてカウントされます。
- 失われたMRR - オファーを受け入れずにキャンセルした顧客、または受け入れたがそれでも解約した顧客。
回復は請求プロバイダーに対して確認されます: Outroはオファーを受け入れた各顧客のサブスクリプションステータスを再確認します(StripeまたはLemon Squeezyから同期され、少なくとも毎日更新)。保存は14日間の猶予期間後に回復済みとしてカウントされ、サブスクリプションがまだライブである場合にのみ - したがって、数字は実際に滞在した顧客を反映し、オファーボタンのクリックではありません。見出しの数字の下で、リスクにさらされているMRRはプラン別および在籍期間別(0-30日、31-90日、91-180日、180日以上)に分解され、新しいトライアルを失っているのか、長期顧客を失っているのかがわかります。ヘッダーラインは支払い顧客にマッチしたキャンセルの数を示します - マッチしないもの(請求データなし)はMRRの数字を持ちません。
日付範囲フィルター(7日 / 30日 / 90日 / すべて)を使用してビューの範囲を設定し、CSVをエクスポートして生のマッチしたキャンセルをスプレッドシートに引き出します。
顧客が解約する理由
顧客が解約する理由パネルは、AIで検出された解約理由 - 高すぎる、機能不足、使用していない、使いにくい、技術的問題、切り替え - で期間を分解し、それぞれのカウントとシェアを表示します。これは発言(または書かれた)回答のみに基づいて機能するため、請求プロバイダーが接続される前でも最初の回答から役立ちます。
多くの回答がその他 / 未分類に分類されると、パネルはそれをフラグします - それは通常、顧客がAI分類にまだカバーされていない理由を挙げていることを意味し、それらの回答は手で聞く価値があります。
分析
分析ページは、すべてのキャンセルページでどれだけのフィードバックを収集しているかを示します - 時間経過に伴う回答量、感情のミックス、スキップ対回答率。

シフトをキャッチするために使用します - 価格変更後のネガティブ感情のスパイクや、新しいテーマがリストに上昇する。
AIサマリー & 週次ダイジェスト
すべての退会インタビューを手で読むことはスケールしません。OutroのAIは生の回答を読みやすいサマリーに変換します: 人々が去る主な理由、代表的な引用、感情の内訳、次のアクションの提案。

週次キャンセルダイジェスト
毎週月曜日の午前9時に、Outroは過去7日間の解約を1画面でまとめたメールを送ります。チームが月曜日の朝に実際に尋ねる質問に対応するために作られています: 誰が去り、なぜ、そしてそれが私たちにどれだけのコストをかけたか。
- 今週のキャンセル - カウント、前週との変化。
- リスクにさらされているMRR、保存済み、失われたMRR - 収益回復と同じ収益の絵を週次で要約。
- 主なキャンセル理由 - 顧客が最も頻繁に挙げた回答の一握り。
- リテンションオファーの結果 - 受け入れられた、拒否された、または表示されなかったオファーの数。
アカウント設定 → 通知 → サンプルダイジェストをプレビューからいつでもレイアウトをプレビューでき、メールをオフにしたい場合はそこで切り替えます。週にキャンセルがゼロのアカウントはスキップされます - 空のメールはありません。
アカウント & チーム
アカウント設定(サイドバーの下部)から組織を管理し、チームメイトを招待し、パスワードを変更します。

タブ
- 一般 - アカウント名と説明を変更。
- ユーザー - メールでチームメイトを招待し、役割(オーナー、管理者、メンバー)を設定。
- 統合 - StripeとLemon Squeezyを接続(上記の請求統合を参照)。
- 通知 - 週次ダイジェストを切り替え、サンプルをプレビュー。
- 請求 - プランを確認、アップグレード、またはサブスクリプションを管理。
- セキュリティ - パスワードを変更し、他のセッションからサインアウト。
請求 & プラン
Outroには無料プランと3つの有料プランがあります - スターター、プロ、スケール。各有料プランは月次または年次で請求され、年次は約2ヶ月分無料になります。すべてのプランで回答は無制限 - プランはページ、音声分、AIレポート、シートで異なります。

各プランに含まれるもの
- 無料 - $0 - 1つのキャンセルページ、月10分の音声分 & 月5つのAIレポート。フルフローを試すためのコミットメントなしの方法。
- スターター - $29/月 ($290/年) - 1つのキャンセルページ、月100分の音声分 & 月30のAIレポート、3つのチームシート、音声 & テキスト退会インタビュー、リテンションオファー、週次ダイジェスト、自動翻訳。
- Pro - 月額$79(年額$790)- 解約ページ最大5件、月300分の音声と100件のAIレポート、チームシート10、高度なセンチメント分析(テーマとトレンド)、カスタムブランディング、Slack通知、データエクスポート、優先サポート。
- スケール - $199/月 ($1,990/年) - 無制限のキャンセルページ、月1,000分の音声分 & 月300のAIレポート、25のチームシート、プロのすべて。
FAQ
Outroをインストールするのにエンジニアリングの助けが必要ですか?
ほとんど必要ありません。最も簡単なセットアップは1行です - 既存の「サブスクリプションをキャンセル」ボタンをOutroリンクに向け、リダイレクトバックを処理します。顧客をアプリ内に留めたい場合は、埋め込みスニペットを貼り付けます。請求プロバイダーを接続するのは設定でのAPIキーだけです。
音声文字起こしはどの言語をサポートしていますか?
顧客は50以上の言語で話すことができます。すべての回答はオリジナル言語で文字起こしされ、あなたが読む言語に翻訳されるため、チームは常に1つの言語で作業します。
顧客は自分の声がAIで文字起こしされることを知っていますか?
はい。すべての音声レコーダーには「あなたの声はAIで文字起こしされます」という短い行が表示され、プライバシーポリシーへのリンクが7つのサポート言語に翻訳されています。これは組み込みのコンプライアンスラインであり、設定可能ではありません。収集したフィードバックのデータ管理者はあなたであり、Outroはあなたに代わってそれを処理します。
顧客が録音したくない場合はどうなりますか?
スキップボタンをクリックすると、すぐにキャンセルを完了するためにリダイレクトされます。Outroはキャンセルをブロックしたり遅らせたりすることはありません - 回答は常にオプションです。
ページを削除した場合、データはどうなりますか?
既に収集した回答は保持されます - ページを削除してもその退会インタビューは破壊されません。削除する代わりにページをオフラインに切り替えることもできます。
支払わずに試すことはできますか?
はい。無料プランでは、無制限の回答(1ヶ月あたり10分の音声分)で実際のキャンセルページを実行できます - クレジットカードは不要です。音声分、ページ、シートが必要になったら、スターター、プロ、スケールにアップグレードしてください。