Skip to main content

Overview

Subscriptions (memberships) allow you to charge customers on a recurring basis for ongoing access to content, products, or services. Gumroad supports both legacy subscriptions and modern tiered memberships.

Subscription Types

Tiered Memberships

Offer multiple membership levels with different pricing and benefits

Legacy Subscriptions

Simple recurring billing for a single product

Installment Plans

Split a one-time payment over multiple charges
New subscriptions are created as tiered memberships by default, providing more flexibility for creators.

Subscription Billing

Recurrence Options

Subscriptions can charge on different schedules:
  • Monthly - Every 30 days
  • Quarterly - Every 3 months
  • Biannually - Every 6 months
  • Yearly - Every 12 months
  • Every Two Years - Every 24 months

Pricing per Recurrence

Tiered memberships can have different prices for each billing period:
// Example pricing structure
Tier: "Premium"
  monthly: $10/month
  yearly: $100/year ($8.33/month, 17% savings)
Offer annual discounts (typically 15-20% off) to encourage longer commitments and reduce churn.

Creating a Subscription Product

Basic Configuration

  1. Enable Recurring Billing
    • Set is_recurring_billing flag
    • Choose default recurrence (monthly, yearly, etc.)
    • Enable is_tiered_membership for multiple tiers
  2. Create Tiers
    • Add variant categories for membership levels
    • Name tiers (e.g., “Basic”, “Pro”, “Premium”)
    • Set prices for each recurrence period
    • Configure benefits and access levels
  3. Content Delivery
    • Upload initial content for members
    • Set up drip content schedule
    • Configure workflows for automated delivery

Free Trials

Offer risk-free trials to increase conversions:
# Enable free trial
product.update!(
  free_trial_enabled: true,
  free_trial_duration_amount: 1,
  free_trial_duration_unit: 'week' # or 'month'
)
Free Trial Workflow:
  1. Customer subscribes without being charged
  2. Card is verified but not charged
  3. Purchase state: not_charged with is_free_trial_purchase flag
  4. After trial period, first charge processes
  5. Subsequent charges continue on schedule
Free trials must be 1 week or 1 month. Other durations are not currently supported.

Subscription Lifecycle

Active Subscription States

  • Active - Subscription is paid and delivering content
  • Pending Cancellation - Cancelled but still active until period end
  • Failed - Payment declined, grace period expired
  • Ended - Fixed-length subscription completed
  • Cancelled - Manually cancelled by user or seller

Subscription Flow

Managing Subscriptions

Original Subscription Purchase

Each subscription has an “original purchase” that serves as the template:
  • Contains customer information
  • Stores variant selection
  • Holds offer code (if applicable)
  • Used to generate recurring charges
# Recurring charge uses original purchase as template
new_purchase = subscription.build_purchase
Copies email, address, variants from original
Applies current pricing
Uses saved payment method

Charging Members

Recurring charges happen automatically:
  1. Scheduled - Worker scheduled for charge date
  2. Build Purchase - Create new purchase from template
  3. Process Payment - Charge saved payment method
  4. Handle Result - Success or failure handling
  5. Update Subscription - Track charge occurrence

Payment Failures

When a charge fails:
  1. Immediate Retry - Retry after 1 hour if network error
  2. Customer Email - “Your card was declined”
  3. Grace Period - 5 days to update payment
  4. Reminder Email - Sent 2 days before end
  5. Auto-Cancel - If not resolved within 5 days
Subscriptions in grace period continue to grant access until the deadline.

Subscription Upgrades & Downgrades

Changing Plans

Members can switch between tiers:
subscription.update_current_plan!(
  new_variants: [new_tier_variant],
  new_price: new_tier_price,
  perceived_price_cents: customer_price
)

Proration Logic

Upgrades (Higher Price):
  • Charge difference immediately
  • Prorate based on days remaining
  • Next full charge on original schedule
Downgrades (Lower Price):
  • Apply at next billing date
  • No immediate charge
  • Customer keeps current tier until renewal

Plan Change Tracking

subscription.subscription_plan_changes.create!(
  from_variant: old_tier,
  to_variant: new_tier,
  applies_at: next_billing_date
)
Make upgrades immediate but downgrades at renewal to maintain revenue and avoid proration complexity.

Cancellation Management

Cancellation Types

  1. By Customer - Self-service cancellation
  2. By Seller - Admin cancellation
  3. By System - Payment failure after grace period
  4. Immediate - Chargeback or product deletion

Cancellation Workflow

# Standard cancellation (end of period)
subscription.cancel!(by_seller: false)
Sets cancelled_at to end of current period
Customer retains access until then
Sends cancellation confirmation email

# Immediate cancellation
subscription.cancel_effective_immediately!
Sets cancelled_at to now
Access revoked immediately
Used for chargebacks or deletions

Preventing Churn

Cancellation Discounts:
  • Offer discount when member cancels
  • One-time offer code applied
  • Reduces price for next few months
offer_code = product.cancellation_discount_offer_code
# Presented at cancellation flow

Access After Cancellation

Control member access post-cancellation:
  • block_access_after_membership_cancellation - Remove access immediately
  • Default behavior - Keep access until period end
Installment plans cannot be cancelled by buyers, only by sellers or system.

Member Management

Member Dashboard

Members access their subscription at /subscriptions/:id/manage:
  • View current plan and billing
  • Update payment method
  • Change membership tier
  • Cancel subscription
  • Access member content

Authentication

Secure member access through:
  1. Cookie Authentication - Set after purchase
  2. User Login - If member has Gumroad account
  3. Magic Link - Email a one-time access token
# Magic link generation
subscription.update!(
  token: SecureRandom.hex,
  token_expires_at: 24.hours.from_now
)

Member Communication

Automatic Emails:
  • Subscription confirmation
  • Payment receipt (each charge)
  • Payment failure notice
  • Cancellation confirmation
  • Renewal reminders (optional)
Seller-Initiated:
  • Broadcast emails to all members
  • Tier-specific announcements
  • Product update notifications

Content Delivery

Initial Access

When someone subscribes:
  1. Existing installments/posts delivered
  2. Access to member-only content
  3. Integration activations (Discord, etc.)

Ongoing Delivery

Installments

Schedule posts/content releases for members

Workflows

Automate email sequences and content drips

Integrations

Grant Discord roles, community access

Downloads

Provide files exclusive to members

Installments

Time-released content for members:
installment.create!(
  title: "Week 3: Advanced Techniques",
  content: "...",
  published_at: 3.weeks.from_now
)
Installment Access Rules:
  • Members see all past installments
  • New installments appear on publish date
  • should_include_last_post - Show most recent before subscribe
  • should_show_all_posts - Show all posts (for tiered memberships)

Payment Methods

Supported Payment Options

  • Credit/Debit Cards - Stored via Stripe
  • PayPal Billing Agreements - Recurring PayPal
  • Apple Pay / Google Pay - Mobile payments

Payment Method Updates

Members can update their payment method:
subscription.update_payment_method!(
  payment_option: new_card,
  credit_card_id: new_card.id
)

Card Updates

  • Stripe automatic card updates
  • Email reminder before card expires
  • Self-service card replacement
Always test subscription flows with real payment methods. Test cards won’t trigger recurring charges.

Subscription Analytics

Key Metrics

MRR

Monthly Recurring Revenue across all active subscriptions

Churn Rate

Percentage of subscribers who cancel per month

LTV

Lifetime Value of average subscriber

ARPU

Average Revenue Per User per month

Cohort Analysis

Track subscription performance:
# Subscriptions by month
subscriptions.group_by { _1.created_at.beginning_of_month }

# Retention over time
subscription.alive_at?(6.months.ago) # Was active 6 months ago?

Subscription Events

Track important subscription milestones:
  • Created
  • Charge succeeded
  • Charge failed
  • Restarted (after failure)
  • Deactivated (ended/cancelled)

Advanced Features

Installment Plans

Split large purchases into payments:
product.create_installment_plan!(
  number_of_charges: 3,
  recurrence: :monthly
)
Example: 300product3x300 product → 3x 100 monthly
  • Immediate access after first payment
  • Subsequent charges automatic
  • Member retains access if paid
  • Cannot be cancelled by buyer

Gifted Subscriptions

Purchase subscriptions for others:
  1. Gifter completes purchase
  2. Giftee receives notification
  3. Giftee can manage subscription
  4. Renewal charges gifter or giftee’s card

Quantity-Based Pricing

For team or multi-seat licenses:
subscription.update!(
  quantity: 5 # 5 seats
)
# Charged: base_price * quantity

Fixed-Length Subscriptions

Subscriptions that end after a set number of charges:
subscription.update!(
  fixed_length: true,
  total_charges: 12 # 1 year if monthly
)
  • Ends automatically after final charge
  • Sends completion notification
  • No renewal or cancellation needed
Fixed-length subscriptions are useful for courses, challenges, or finite membership periods.

Subscription Workflows

Automated Actions

Trigger actions based on subscription events: On Subscribe:
  • Send welcome email sequence
  • Add to Discord server
  • Grant community access
  • Deliver bonus content
On Cancel:
  • Send feedback survey
  • Offer win-back discount
  • Remove integrations
  • Schedule follow-up
On Renewal:
  • Thank you message
  • Unlock new content
  • Reward loyalty perks

API and Webhooks

Subscription API

// Get subscriber list
GET /v2/products/:id/subscribers

// Get specific subscription
GET /v2/subscribers/:id

// Cancel subscription
DELETE /v2/subscribers/:id

Webhook Events

// Subscription created
{
  "subscription": {
    "id": "sub_123",
    "product_id": "prod_abc",
    "email": "[email protected]",
    "recurrence": "monthly",
    "status": "active"
  }
}

// Subscription cancelled
{
  "subscription": {
    "id": "sub_123",
    "cancelled_at": "2024-01-31T23:59:59Z",
    "status": "cancelled"
  }
}
Use webhooks to sync subscription status with external platforms like Discord, Slack, or your own database.

Best Practices

Clear Value

Communicate ongoing benefits clearly

Consistent Delivery

Publish new content regularly and reliably

Easy Cancellation

Make cancellation simple to build trust

Engagement

Build community and interact with members

Troubleshooting

Common Issues

Charge Failures:
  • Expired cards
  • Insufficient funds
  • Bank fraud blocks
  • Incorrect billing address
Solution: Prompt members to update payment method in dashboard High Churn:
  • Unclear value proposition
  • Inconsistent content delivery
  • Poor onboarding
  • Pricing too high
Solution: Survey cancelled members, improve onboarding, deliver more value

Next Steps

Products

Learn how to create subscription products

Sales

Manage subscription charges and revenue

Workflows

Automate member communication and delivery

Build docs developers (and LLMs) love