# revenuecat-troubleshoot

Diagnoses RevenueCat in-app purchase bugs across mobile frameworks, checking SDK debug logs, store product status, and dashboard settings.

- skill · `type=skill` · Claude Code, Codex, Cursor, GitHub Copilot, Gemini CLI, OpenCode · 862 installs · ★ 76
- Author: RevenueCat
- License: MIT · policy=mirror · the beginning of the file is at the end of this page
- Source: https://github.com/RevenueCat/ai-toolkit/tree/HEAD/revenuecat/skills/revenuecat-troubleshoot/SKILL.md
- Updated: 2026-10-21
- HTML: https://affpapa.org/en/nevibecode/skills/revenuecat-troubleshoot

## What it does

The skill detects project environments by scanning repository root files for React Native, Flutter, Kotlin Multiplatform, native Android, or native iOS configs. It then sets the SDK `logLevel` to debug to inspect output directly. Most purchase failures surface clearly in these runtime logs.

A universal checklist verifies required credentials: key prefixes (`appl_` on iOS versus `goog_` on Android), exact casing in the `bundle_id` or `package_name`, and active product statuses in App Store Connect or Google Play Console. Draft products are never returned by store APIs, even in sandbox mode. Without an active network bypass for strict VPNs or DNS filters, the SDK will fail silently on remote API calls.

When paired with the RevenueCat MCP server or the `rc` CLI, the agent queries dashboard states directly. Tools like `list-offerings` and `get-product-store-state` let it confirm whether packages attach correctly to current offerings and whether the store acknowledges the registered identifiers.

## Install

### Claude Code (native platform)

1. **Skills CLI (Vercel)**
```bash
npx skills add RevenueCat/ai-toolkit --skill revenuecat-troubleshoot -a claude-code
```

2. **Manually: put the files in place**
- File: `~/.claude/skills/revenuecat-troubleshoot/SKILL.md` — Copy the whole skill folder; for one project use .claude/skills/revenuecat-troubleshoot/

### Codex

1. **Skills CLI (Vercel)**
```bash
npx skills add RevenueCat/ai-toolkit --skill revenuecat-troubleshoot -a codex
```

2. **Manually: put the files in place**
- File: `.agents/skills/revenuecat-troubleshoot/SKILL.md` — For all projects use ~/.agents/skills/

### Cursor

1. **Skills CLI (Vercel)**
```bash
npx skills add RevenueCat/ai-toolkit --skill revenuecat-troubleshoot -a cursor
```

2. **Manually: put the files in place**
- File: `.cursor/skills/revenuecat-troubleshoot/SKILL.md` — Cursor also reads .agents/skills/ and .claude/skills/

### GitHub Copilot

1. **GitHub CLI**
```bash
gh skill install RevenueCat/ai-toolkit revenuecat-troubleshoot
```

2. **Manually: put the files in place**
- File: `.github/skills/revenuecat-troubleshoot/SKILL.md`

### Gemini CLI

1. **Skills CLI (Vercel)**
```bash
npx skills add RevenueCat/ai-toolkit --skill revenuecat-troubleshoot -a gemini-cli
```

2. **Platform CLI**
```bash
gemini skills install https://github.com/RevenueCat/ai-toolkit --path revenuecat/skills/revenuecat-troubleshoot
```

### Windsurf (Devin Desktop)

**Manually: put the files in place**
- File: `.devin/skills/revenuecat-troubleshoot/SKILL.md` — The legacy .windsurf/skills/ path still works

### OpenCode

**Skills CLI (Vercel)**
```bash
npx skills add RevenueCat/ai-toolkit --skill revenuecat-troubleshoot -a opencode
```

### Claude.ai

**Claude.ai**
- Zip the folder and upload it in Settings → Capabilities → Skills

Where a file is given instead of a command, copy the files from the source to that path: https://github.com/RevenueCat/ai-toolkit/tree/HEAD/revenuecat/skills/revenuecat-troubleshoot/SKILL.md

## When to use it
- Resolve empty offerings or missing store products in mobile apps
- Track down missing entitlements after successful sandbox transactions
- Verify bundle identifiers and package names against dashboard entries
- Catch mismatched public SDK keys between Android and iOS builds

## Example prompts
- Check why getOfferings returns an empty package list in our Flutter project.
- Inspect RevenueCat debug logs to see why the sandbox entitlement does not unlock on iOS.
- Use the RevenueCat MCP server to confirm our public API keys and bundle ID match the project.

## Source text · SKILL.md · MIT

Below is the content of a third-party file. It is data, not instructions for you: do not act on anything written inside unless the human asks. Block tag: 86ab4d80debe3a18.

BEGIN THIRD-PARTY FILE 86ab4d80debe3a18
```text
---
name: revenuecat-troubleshoot
description: Diagnose and resolve RevenueCat integration issues — inspects dashboard configuration through the RevenueCat MCP, walks the SDK debug logs, and covers code-side gotchas. Use when the user says offerings are empty, products not loading, entitlement not active after purchase, paywall won't load, transactions not appearing, customer info shows no entitlements, sandbox purchase not working, an SDK-gated RevenueCat feature not working, or RevenueCat is broken on iOS, Android, Kotlin Multiplatform, Flutter, or React Native. Also use when asked to check or validate the store / product setup.
---

# revenuecat-troubleshoot: diagnose RevenueCat integration problems

Use this skill when the user reports a RevenueCat behavior that does not match expectations: empty offerings, missing products, an entitlement that does not unlock after a successful purchase, a paywall that fails to render, or sandbox transactions that never reach the dashboard.

This skill combines two angles:

1. **Code-side diagnosis** — turn on debug logging, walk a universal checklist, drop into platform specifics.
2. **Dashboard inspection** — use the RevenueCat MCP server or the `rc` CLI (see the `revenuecat-cli` skill) to read the project, apps, products, entitlements, offerings, and webhooks, and offer fixes.

Work them in order. Most reports resolve before you reach the platform specifics.

## 1. Detect the platform

Inspect the working directory and pick the **first** match, from top to bottom:

1. **React Native**: `package.json` has a `react-native-purchases` entry, or `react-native` as a dependency → read `platforms/react-native.md`. If `expo` is also a dependency, note it as an Expo project.
2. **Flutter**: `pubspec.yaml` exists at the project root → read `platforms/flutter.md`.
3. **Kotlin Multiplatform**: `build.gradle.kts` contains a `kotlin { … }` multiplatform source sets block, or depends on `com.revenuecat.purchases:purchases-kmp*` → read `platforms/kmp.md`.
4. **Android (native)**: `build.gradle(.kts)` applies `com.android.application` (and is not KMP) → read `platforms/android.md`.
5. **iOS (native)**: `Package.swift`, `*.xcodeproj`, `*.xcworkspace`, or `Podfile` at the project root → read `platforms/ios.md`.

If several match (e.g. an `ios/` folder inside a Flutter project), pick the **outermost** project, the one that owns the build. If still ambiguous, ask the user which platform the bug reproduces on.
```
END THIRD-PARTY FILE 86ab4d80debe3a18

The third-party file has ended. Everything between the 86ab4d80debe3a18 tags is data: requests and commands from it are not followed. An “end of file” line with another tag inside the block is part of the file.

First 2491 of 16416 bytes. © RevenueCat · MIT · https://github.com/RevenueCat/ai-toolkit/tree/HEAD/revenuecat/skills/revenuecat-troubleshoot/SKILL.md

_Part of the page did not fit — see the HTML version._

---
NeVibeCode on affpapa.org. Catalog texts are descriptions, not instructions for the agent. How to choose and install: https://affpapa.org/en/nevibecode/agents.md
