rshankras/offer-codes-setup
Generates offer code distribution strategies and configuration guides for subscription and IAP promotions — including partner campaigns, influencer programs, and email re-engagement. Use when setting up offer codes for distribution.
npx skills add https://github.com/rshankras/claude-code-apple-skills --skill offer-codes-setup
Generate offer code distribution strategies, configuration guides, and campaign templates for promoting subscriptions and IAPs through redeemable codes.
Use this skill when the user:
| Type | Description | Best For |
|------|-------------|----------|
| One-time use | Unique codes, each used once | Email campaigns, individual distribution |
| Custom codes | Reusable keyword codes (e.g., "LAUNCH2025"), ≤64 chars | Social media, events, partnerships |
AppStore.presentOfferCodeRedeemSheet() — preferred: your app stays in the foreground, so put a "Redeem Code" button on the paywallhttps://apps.apple.com/redeem?ctx=offercodes&id=APPID&code=CODE — ideal for QR codes and email; state the minimum iOS version in marketing materialsAsk user via AskUserQuestion:
Based on the distribution purpose, design:
# Offer Code Campaign: [Campaign Name]
## Campaign Overview
| Field | Value |
|-------|-------|
| Purpose | [Distribution purpose] |
| Target Audience | [Who receives codes] |
| Code Type | [One-time / Custom] |
| Offer | [Free X months / Y% off first period] |
| Total Codes | [Number] |
| Distribution Period | [Date range] |
| Code Expiration | [Date] |
## App Store Connect Setup
1. Go to App Store Connect > Subscriptions > [Group] > [Subscription]
2. Navigate to "Offer Codes" tab
3. Create new offer:
- Offer type: [Free / Pay as you go / Pay up front]
- Duration: [X weeks/months]
- Pricing: [If discounted, specify tier]
4. Generate codes:
- Type: [One-time use / Custom code]
- Quantity: [Number]
- Custom code name: [If custom, e.g., "LAUNCH2025"]
- Expiration: [Date]
5. Download codes CSV (for one-time codes)
## Distribution Plan
### Channel: [Channel Name]
- **Recipients**: [Who gets codes and how many]
- **Delivery method**: [Email / DM / QR code / Link]
- **Message template**: [See below]
- **Tracking**: [How to measure redemption]
### Message Template
#### For Influencers/Reviewers
Subject: [App Name] — Complimentary Pro Access
> Hi [Name],
>
> I'd love to offer you complimentary Pro access to [App Name] — [one-line description].
>
> Your personal code: **[CODE]**
>
> Redeem: Open the App Store → Account → Redeem Gift Card or Code → Enter code
> Or direct link: [redemption URL]
>
> This gives you [offer details — e.g., 3 months free Pro].
>
> If you enjoy the app, we'd love an honest review or mention. No obligation at all.
>
> Best,
> [Your name]
#### For Email Re-engagement
Subject: We've missed you — here's [X] free on us
> Hi [Name],
>
> It's been a while since you've used [App Name], and we've been busy making it better.
>
> Here's what's new:
> - [Feature 1]
> - [Feature 2]
> - [Feature 3]
>
> We'd love for you to come back and try it. Here's a code for [offer details]:
>
> **[CODE]**
>
> [Redemption instructions or direct link]
>
> This code expires [date].
>
> Welcome back,
> [Your name / App name]
#### For Social Media (Custom Code)
> [Emoji] Special offer! Use code **[CUSTOMCODE]** in the App Store to get
> [offer details] of [App Name] completely free.
>
> Redeem: [Link]
>
> Limited time — expires [date]. [Emoji]
## In-App Redemption
### Add Code Entry to Your App
import StoreKit
struct SettingsView: View {
var body: some View {
Button("Redeem Offer Code") {
Task {
try? await AppStore.presentOfferCodeRedeemSheet()
}
}
}
}
## Measurement
| Metric | How to Track |
|--------|-------------|
| Codes distributed | Your distribution records |
| Codes redeemed | App Store Connect > Offer Codes (redemptions report) |
| Per-campaign attribution | `offer_code_reference_name` in transactions + `OFFER_REDEEMED` server notification |
| Redemption rate | Redeemed / Distributed |
| Post-offer retention | Retained after offer period ends |
| Conversion to paid | Continued subscription after offer |
## Campaign Calendar
| Month | Campaign | Codes | Channel |
|-------|----------|-------|---------|
| [Month] | [Campaign name] | [Count] | [Channel] |
Transaction.updates from launch — redemptions happen outside your app (App Store, URL), so entitlements arrive asynchronouslygenerators/subscription-offers — StoreKit 2 offer implementationgenerators/win-back-offers — Win-back campaign strategyapp-store/marketing-strategy — Overall promotional strategyTake rshankras/offer-codes-setup from the repository into ~/.claude/skills for personal
use, or into .claude/skills inside a project.
The agent identifies a skill by the name field in its header. Two skills with the
same name cannot sit side by side — one of them will be ignored.