StripeのSubscription Schedule APIを活用した期間限定オファーの実装方法

SaaSビジネスにおいて、新規顧客の獲得や既存顧客の定着は重要な課題です。新規ユーザーを獲得するために、割引や特別オファーをいかに効果的に顧客に提供するかが課題となります。

本記事では、Stripe のSubscription Schedule APIを使って、新規顧客獲得キャンペーン、既存顧客のアップグレード促進、イベントに合わせた期間限定オファーの3つのユースケースを通じて効果的なプロモーションを実現する方法を説明します。

## ユースケース1: 新規顧客獲得キャンペーンの実装

新規顧客に対して、最初の3ヶ月間サービス料金を50%割り引くキャンペーンを考えてみましょう。Stripeでは、APIやダッシュボードを使ってさまざまな割引クーポンを簡単に作成できます。

![スクリーンショット 2024-03-27 16.31.57.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2366300/939ef2de-dce6-faab-aa19-00c8e5b60feb.png)

```js
  // 3ヶ月間の50%割引クーポンを作成
  const coupon = await stripe.coupons.create({
    duration: 'repeating',
    duration_in_months: 3,
    percent_off: 50,
  });
```

3ヶ月間有効な割引クーポンをAPIで作成する場合、`duration`を`repeating`に設定し、`duration_in_months`を3に設定します。作成したクーポンを任意の期間だけ適用するようなサブスクリプションを作るには、[Subscription Schedule API](https://stripe.com/docs/api/subscription_schedules/create)を使用します。

```js
  // 割引スケジュールを顧客に適用
  const schedule = await stripe.subscriptionSchedules.create({
    customer: 'CUSTOMER_ID',
    start_date: Math.floor(Date.now() / 1000), // 即時開始
    end_behavior: 'release', // スケジュール終了後に自動解放
    phases: [
      {
        items: [{ plan: 'PLAN_ID' }], // 50%割引を適用するプラン
        iterations: 3, // 割引期間を3ヶ月間
        coupon: coupon.id, // 作成したクーポンを適用
      },
      {
        items: [{ plan: 'PLAN_ID' }],
        iterations: 9, // その後は通常価格で9ヶ月
      },
    ],
  });

  console.log('New customer campaign created with ID:', schedule.id);

```

このコードでは、`end_behavior`を`release`に設定しているため、12ヶ月が経過するとサブスクリプションスケジュールは終了し、通常のサブスクリプションに切り替わります。

## ユースケース2: アップグレード時の割引プロモーション

続いて既存の顧客に対して、基本プランからプレミアムプランへのアップグレードを促進するプロモーションを考えてみましょう。プロモーション期間中に20%の割引を提供することを検討しましょう。

まず、[Coupon API](https://stripe.com/docs/api/coupons/create)を使って、最初の3ヶ月間20%割引の"アップグレード用"クーポンを作成します。

```js
  // アップグレード時の3ヶ月間20%割引クーポンを作成
  const upgrade_coupon = await stripe.coupons.create({
    duration: 'repeating',
    duration_in_months: 3,
    percent_off: 20,
  });
```


次に、[Subscription Schedule API](https://stripe.com/docs/api/subscription_schedules/create)を使って、元のサブスクリプションから新しいプランへのスムーズな移行を実現します。

```js
  // アップグレード割引スケジュールを設定
  const schedule = await stripe.subscriptionSchedules.create({
    customer: 'CUSTOMER_ID',
    start_date: Math.floor(Date.now() / 1000), // 即時開始
    end_behavior: 'release',
    from_subscription: 'SUBSCRIPTION_ID', // 元のサブスクリプションからスムーズに移行
    phases: [
      {
        items: [{ plan: 'BASIC_PLAN_ID' }], // 基本プラン
        iterations: 5, // アップグレード前の期間
      },
      {
        items: [{ plan: 'PREMIUM_PLAN_ID' }], // プレミアムプラン
        iterations: 3, // 割引適用期間
        coupon: upgrade_coupon.id, // アップグレード用クーポンを適用
      },
      {
        items: [{ plan: 'PREMIUM_PLAN_ID' }],
        iterations: 4, // 割引終了後の通常価格期間
      },
    ],
  });

  console.log('Upgrade promotion schedule created for customer:', schedule.customer);

```

`from_subscription`を使うことで、既存のサブスクリプションから新しいスケジュールに移行できます。

## ユースケース3: プロジェクト・イベント関連の期間限定オファー

最後に、ホリデーシーズンのような特別なイベントに合わせた期間限定オファーの実装方法を見ていきましょう。ここでは、ホリデーシーズン中、通常価格から30%割引となる特別プランを提供するケースを例にします。

まず、[Coupon API](https://stripe.com/docs/api/coupons/create)を使って、1回限りの30%割引クーポンを作成します。

```js
  // ホリデーシーズン用30%割引クーポンを作成
  const holiday_coupon = await stripe.coupons.create({
    duration: 'once',
    percent_off: 30,
  });
```


次に、[Subscription Schedule API](https://stripe.com/docs/api/subscription_schedules/create)を使って、ホリデーシーズンの期間中のみ割引プランを適用し、その後は通常プランへ自動的に切り替わるようにスケジュールを設定します。

```js
  // ホリデー期間の割引プランスケジュールを設定
  const schedule = await stripe.subscriptionSchedules.create({
    customer: 'CUSTOMER_ID',
    start_date: Math.floor(Date.now() / 1000),
    end_behavior: 'release',
    phases: [
      {
        items: [{ plan: 'HOLIDAY_PLAN_ID' }], // 割引プラン
        iterations: 1, // ホリデー期間
        coupon: holiday_coupon.id, // 割引クーポンを適用
      },
      {
        items: [{ plan: 'REGULAR_PLAN_ID' }], // 通常プラン
        iterations: 11, // ホリデー期間後の通常期間
      },
    ],
  });

  console.log('Holiday promotion schedule created with ID:', schedule.id);
```

このコードでは、ホリデーシーズン期間中のみ割引プランが適用され、その後は自動的に通常プランに切り替わるよう設定しています。

## まとめ

Stripe APIを活用することで、以下のようなプロモーション施策を柔軟に実現できます。

1. **新規顧客獲得キャンペーン**
2. **既存顧客のアップグレード促進**
3. **特定イベントや期間限定の割引オファー**

これらのユースケースを組み合わせることで、新規顧客の獲得から既存顧客の維持・育成まで、Stripe APIを活用したきめ細かいプロモーション施策が可能になります。

Stripe APIを活用して、顧客体験の向上とビジネス成長を実現しましょう。

### 関連ドキュメント


https://docs.stripe.com/billing/subscriptions/subscription-schedules

https://docs.stripe.com/api/subscription_schedules/create

https://docs.stripe.com/api/coupons/create