Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Every RevenueCat v2 endpoint, plus a local database, offline search Trigger phrases: `what's my MRR`, `revenue snapshot`, `who churned this week`, `show failed billing`, `find entitlement desync`, `trace this refund`, `use revenuecat`, `run revenuecat`.
.claude/skills/mvanhorn-pp-revenuecat/SKILL.md| Model | Eval pass | Runs |
|---|---|---|
| gemini-3.6-flash | 100% | 20 |
| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-02 | ✗→✓ | ▲ Improved | 167% | 0% |
| case-03 | ✗→✓ | ▲ Improved | 77% | 0% |
| case-07 | ✗→✓ | ▲ Improved | 102% | 0% |
| case-08 | ✗→✓ | ▲ Improved | 138% | 0% |
| case-11 | ✗→✓ | ▲ Improved | 150% | 0% |
<!-- GENERATED FILE — DO NOT EDIT. This file is a verbatim mirror of library/payments/revenuecat/SKILL.md, regenerated post-merge by tools/generate-skills/. Hand-edits here are silently overwritten on the next regen. Edit the library/ source instead. See the repository agent guide, section "Generated artifacts: registry.json, cli-skills/". -->
This skill drives the revenuecat-pp-cli binary. You must verify the CLI is installed before invoking any command from this skill. If it is missing, install it first:
$HOME/.local/bin on macOS/Linux and %LOCALAPPDATA%\Programs\PrintingPress\bin on Windows:bash npx -y @mvanhorn/printing-press-library install revenuecat --cli-only
revenuecat-pp-cli --version$PATH for the agent/runtime that will invoke this skill.If the npx install fails (no Node, offline, etc.), fall back to a direct Go install (requires Go 1.26.6 or newer):
bashgo install github.com/mvanhorn/printing-press-library/library/payments/revenuecat/cmd/revenuecat-pp-cli@latest
If --version reports "command not found" after install, the runtime cannot see the binary directory on $PATH. Do not proceed with skill commands until verification succeeds.
Use this CLI when you need programmatic or agent-driven visibility into RevenueCat mobile subscription state: revenue and MRR/ARR snapshots, churn and dunning analysis, entitlement reconciliation, refund tracing, and webhook config audits. It is the mobile-rail companion to a Lemon Squeezy CLI for the web rail.
Do not use this CLI for:
These capabilities aren't available in any other tool for this API.
revenue-snapshot — Point-in-time MRR, ARR, active subscriptions, trials, and revenue in your chosen currency, with deltas against your last snapshot._Reach for this when an agent or operator asks 'where's revenue right now and how did it move since last check' in one call._
bash revenuecat-pp-cli revenue-snapshot --currency USD --agent
mrr-trend — MRR over time with new / expansion / contraction / churn movement decomposition and week-over-week deltas._Reach for this to explain why MRR moved, not just that it moved._
bash revenuecat-pp-cli mrr-trend --period week --limit 12 --agent
trial-funnel — New trials to conversion-to-paying funnel with stage-to-stage drop-off._Reach for this to see where trials leak before they convert._
bash revenuecat-pp-cli trial-funnel --since 30d --agent
churn-watch — Which subscriptions flipped to billing-issue, grace, expired, or cancelled in a window, with per-subscription dollar exposure._Reach for this when you need who churned and how much MRR they took, not just the churn rate line._
bash revenuecat-pp-cli churn-watch --since 7d --agent
dunning-alert — Subscriptions still in grace or billing-issue state joined with their unpaid invoices, ranked by recoverable amount._Reach for this to act on failed billing while the revenue is still recoverable._
bash revenuecat-pp-cli dunning-alert --agent
entitlement-rollup — Per-entitlement active-customer counts and product attachments, flagging customers whose entitlement state disagrees with their subscription state._Reach for this to catch silent entitlement desync (a dropped webhook, a refund that didn't cascade) across the whole customer base._
bash revenuecat-pp-cli entitlement-rollup --flag-disagreements --agent
refund-cascade — Traces a subscription or purchase through its transactions, refund history, and resulting entitlement loss; --apply issues the refund._Reach for this to understand or execute a refund and see exactly which entitlements the customer loses._
bash revenuecat-pp-cli refund-cascade sub1a2b3c4d --agent
webhook-audit — Lists configured webhook integrations grouped by destination host, flagging duplicate or stale destinations._Reach for this to confirm webhook delivery config before a dropped event silently desyncs entitlements._
bash revenuecat-pp-cli webhook-audit --agent
apps — Operations about apps.
revenuecat-pp-cli apps create — This endpoint requires the following permission(s): project_configuration:apps:read_write .revenuecat-pp-cli apps delete — This endpoint requires the following permission(s): project_configuration:apps:read_write .revenuecat-pp-cli apps get — This endpoint requires the following permission(s): project_configuration:apps:read .revenuecat-pp-cli apps list — This endpoint requires the following permission(s): project_configuration:apps:read .revenuecat-pp-cli apps update — This endpoint requires the following permission(s): project_configuration:apps:read_write .audit-logs — Operations about audit logs.
revenuecat-pp-cli audit-logs <project_id> — This endpoint requires the following permission(s): project_configuration:audit_logs:read .charts — Manage charts
revenuecat-pp-cli charts <project_id> — Returns time-series data for a specific chart.collaborators — Operations about collaborators.
revenuecat-pp-cli collaborators <project_id> — This endpoint requires the following permission(s): project_configuration:collaborators:read .customers — Operations about customers.
revenuecat-pp-cli customers create — This endpoint requires the following permission(s): customer_information:customers:read_write .revenuecat-pp-cli customers delete — This endpoint requires the following permission(s): customer_information:customers:read_write .revenuecat-pp-cli customers get — This endpoint requires the following permission(s): customer_information:customers:read .revenuecat-pp-cli customers list — This endpoint requires the following permission(s): customer_information:customers:read .entitlements — Operations about entitlements.
revenuecat-pp-cli entitlements create — This endpoint requires the following permission(s): project_configuration:entitlements:read_write .revenuecat-pp-cli entitlements delete — This endpoint requires the following permission(s): project_configuration:entitlements:read_write .revenuecat-pp-cli entitlements get — This endpoint requires the following permission(s): project_configuration:entitlements:read .revenuecat-pp-cli entitlements list — This endpoint requires the following permission(s): project_configuration:entitlements:read .revenuecat-pp-cli entitlements update — This endpoint requires the following permission(s): project_configuration:entitlements:read_write .integrations — Operations about integrations.
revenuecat-pp-cli integrations create-webhook — This endpoint requires the following permission(s): project_configuration:integrations:read_write .revenuecat-pp-cli integrations delete-webhook — This endpoint requires the following permission(s): project_configuration:integrations:read_write .revenuecat-pp-cli integrations get-webhook — This endpoint requires the following permission(s): project_configuration:integrations:read .revenuecat-pp-cli integrations list-webhook — This endpoint requires the following permission(s): project_configuration:integrations:read .revenuecat-pp-cli integrations update-webhook — This endpoint requires the following permission(s): project_configuration:integrations:read_write .media-assets — Manage media assets
revenuecat-pp-cli media-assets <project_id> — This endpoint requires the following permission(s): project_configuration:offerings:read_write .metrics — Manage metrics
revenuecat-pp-cli metrics get-overview — This endpoint requires the following permission(s): charts_metrics:overview:read .revenuecat-pp-cli metrics get-revenue — Returns the total revenue for the project across all of its apps for the given inclusive date range start_dateofferings — Operations about offerings.
revenuecat-pp-cli offerings create — This endpoint requires the following permission(s): project_configuration:offerings:read_write .revenuecat-pp-cli offerings delete — This endpoint requires the following permission(s): project_configuration:offerings:read_write .revenuecat-pp-cli offerings get — This endpoint requires the following permission(s): project_configuration:offerings:read .revenuecat-pp-cli offerings list — This endpoint requires the following permission(s): project_configuration:offerings:read .revenuecat-pp-cli offerings update — This endpoint requires the following permission(s): project_configuration:offerings:read_write .packages — Operations about packages.
revenuecat-pp-cli packages delete-from-offering — This endpoint requires the following permission(s): project_configuration:packages:read_write .revenuecat-pp-cli packages get — This endpoint requires the following permission(s): project_configuration:packages:read .revenuecat-pp-cli packages update — This endpoint requires the following permission(s): project_configuration:packages:read_write .paywalls — Operations about paywalls.
revenuecat-pp-cli paywalls create — Create a paywall draft for a project.revenuecat-pp-cli paywalls delete — This endpoint requires the following permission(s): project_configuration:offerings:read_write .revenuecat-pp-cli paywalls get — This endpoint requires the following permission(s): project_configuration:offerings:read .revenuecat-pp-cli paywalls list — This endpoint requires the following permission(s): project_configuration:offerings:read .revenuecat-pp-cli paywalls update — Update a paywall draft.products — Operations about products.
revenuecat-pp-cli products create — Warning This endpoint does not allow to create Web Billing products.revenuecat-pp-cli products delete — This endpoint requires the following permission(s): project_configuration:products:read_write .revenuecat-pp-cli products get — This endpoint requires the following permission(s): project_configuration:products:read .revenuecat-pp-cli products list — This endpoint requires the following permission(s): project_configuration:products:read .revenuecat-pp-cli products update — This endpoint requires the following permission(s): project_configuration:products:read_write .projects — Operations about projects.
revenuecat-pp-cli projects create — This endpoint requires the following permission(s): project_configuration:projects:read_write .revenuecat-pp-cli projects list — This endpoint requires the following permission(s): project_configuration:projects:read .purchases — Operations about purchases.
revenuecat-pp-cli purchases get — This endpoint requires the following permission(s): customer_information:purchases:read .revenuecat-pp-cli purchases search — Search for a one-time purchases by any of its associated store_purchase_identifier values.subscriptions — Operations about subscriptions.
revenuecat-pp-cli subscriptions get — This endpoint requires the following permission(s): customer_information:subscriptions:read .revenuecat-pp-cli subscriptions search — Search for a subscription by any of its associated store_subscription_identifier valuesvirtual-currencies — Manage virtual currencies
revenuecat-pp-cli virtual-currencies create-virtual-currency — This endpoint requires the following permission(s): project_configuration:virtual_currencies:read_write .revenuecat-pp-cli virtual-currencies delete-virtual-currency — This endpoint requires the following permission(s): project_configuration:virtual_currencies:read_write .revenuecat-pp-cli virtual-currencies get-virtual-currency — This endpoint requires the following permission(s): project_configuration:virtual_currencies:read .revenuecat-pp-cli virtual-currencies list — This endpoint requires the following permission(s): project_configuration:virtual_currencies:read .revenuecat-pp-cli virtual-currencies update-virtual-currency — This endpoint requires the following permission(s): project_configuration:virtual_currencies:read_write .When you know what you want to do but not which command does it, ask the CLI directly:
bashrevenuecat-pp-cli which "<capability in your own words>"
which resolves a natural-language capability query to the best matching command from this CLI's curated feature index. Exit code 0 means at least one match; exit code 2 means no confident match — fall back to --help or use a narrower query.
bashrevenuecat-pp-cli revenue-snapshot --currency USD --agent --select mrr,active_subscriptions,mrr_delta
One pasteable line of MRR, active subs, and the change since the last snapshot.
bashrevenuecat-pp-cli dunning-alert --agent
Subscriptions still in grace or billing-issue joined with unpaid invoices, ranked by what you can still recover.
bashrevenuecat-pp-cli entitlement-rollup --flag-disagreements --agent
Surfaces customers whose entitlement state disagrees with their subscription state across the whole base.
bashrevenuecat-pp-cli refund-cascade sub1a2b3c4d --agent
Shows the transactions, refund history, and entitlements a customer loses before you issue the refund.
RevenueCat v2 uses a server-side Secret API key sent as 'Authorization: Bearer <key>'. Create one in the RevenueCat dashboard under Project Settings -> API Keys -> Secret API keys (a read-only key is enough for every read command). This is distinct from the public SDK keys. Set REVENUECAT_API_KEY and REVENUECAT_PROJECT_ID in your environment; run 'revenuecat-pp-cli doctor' to confirm both resolve against your project.
Run revenuecat-pp-cli doctor to verify setup.
Add --agent to any command. Expands to: --json --compact --no-input --no-color --yes.
--select keeps a subset of fields. Dotted paths descend into nested structures; arrays traverse element-wise. Critical for keeping context small on verbose APIs:bash revenuecat-pp-cli apps list mock-value --agent --select id,name,status
--dry-run shows the request without sending--idempotent only when an already-existing create should count as success, and --ignore-missing only when a missing delete target should count as successCommands that read from the local store or the API wrap output in a provenance envelope:
json{ "meta": {"source": "live" | "local", "synced_at": "...", "reason": "..."}, "results": <data> }
Parse .results for data and .meta.source to know whether it's live or local. A human-readable N results (live) summary is printed to stderr only when stdout is a terminal AND no machine-format flag (--json, --csv, --compact, --quiet, --plain, --select) is set — piped/agent consumers and explicit-format runs get pure JSON on stdout.
When you (or the agent) notice something off about this CLI, record it:
revenuecat-pp-cli feedback "the --since flag is inclusive but docs say exclusive"
revenuecat-pp-cli feedback --stdin < notes.txt
revenuecat-pp-cli feedback list --json --limit 10Entries are stored locally at ~/.local/share/revenuecat-pp-cli/feedback.jsonl. They are never POSTed unless REVENUECAT_FEEDBACK_ENDPOINT is set AND either --send is passed or REVENUECAT_FEEDBACK_AUTO_SEND=true. Default behavior is local-only.
Write what surprised you, not a bug report. Short, specific, one line: that is the part that compounds.
Every command accepts --deliver <sink>. The output goes to the named sink in addition to (or instead of) stdout, so agents can route command results without hand-piping. Three sinks are supported:
| Sink | Effect | |------|--------| | stdout | Default; write to stdout only | | file:<path> | Atomically write output to <path> (tmp + rename) | | webhook:<url> | POST the output body to the URL (application/json or application/x-ndjson when --compact) |
Unknown schemes are refused with a structured error naming the supported set. Webhook failures return non-zero and log the URL + HTTP status on stderr.
A profile is a saved set of flag values, reused across invocations. Use it when a scheduled agent calls the same command every run with the same configuration - HeyGen's "Beacon" pattern.
revenuecat-pp-cli profile save briefing --json
revenuecat-pp-cli --profile briefing apps list mock-value
revenuecat-pp-cli profile list --json
revenuecat-pp-cli profile show briefing
revenuecat-pp-cli profile delete briefing --yesExplicit flags always win over profile values; profile values win over defaults. agent-context lists all available profiles under available_profiles so introspecting agents discover them at runtime.
| Code | Meaning | |------|---------| | 0 | Success | | 2 | Usage error (wrong arguments) | | 3 | Resource not found | | 4 | Authentication required | | 5 | API error (upstream issue) | | 7 | Rate limited (wait and retry) | | 10 | Config error |
Parse $ARGUMENTS:
help, or --help → show revenuecat-pp-cli --help outputinstall → ends with mcp → MCP installation; otherwise → see Prerequisites above--agent)bash go install github.com/mvanhorn/printing-press-library/library/payments/revenuecat/cmd/revenuecat-pp-mcp@latest
bash claude mcp add revenuecat-pp-mcp -- revenuecat-pp-mcp
claude mcp listwhich revenuecat-pp-cliIf not found, offer to install (see Prerequisites at the top of this skill).
--agent flag:bash revenuecat-pp-cli <command> [subcommand] [args] --agent
revenuecat-pp-cli <command> --help.| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-01 | fail→fail | 6,086 | 18,203 | +199% | 1 | 1 | 0% | 741 | 5,132 | +593% | 0 | 0 | — |
case-02 | fail→pass | 20,954 | 10,405 | -50% | 1 | 1 | 0% | 2,368 | 6,331 | +167% | 0 | 0 | — |
case-03 | fail→pass | 19,466 | 2,177 | -89% | 1 | 1 | 0% | 2,902 | 5,131 | +77% | 0 | 0 | — |
case-04 | pass→pass | 16,009 | 9,617 | -40% | 1 | 1 | 0% | 2,903 | 6,684 | +130% | 0 | 0 | — |
case-05 | pass→pass | 12,329 | 5,049 | -59% | 1 | 1 | 0% | 2,083 | 5,695 | +173% | 0 | 0 | — |
case-06 | pass→pass | 14,668 | 8,951 | -39% | 1 | 1 | 0% | 2,200 | 5,646 | +157% | 0 | 0 | — |
case-07 | fail→pass | 18,202 | 3,785 | -79% | 1 | 1 | 0% | 2,724 | 5,492 | +102% | 0 | 0 | — |
case-08 | fail→pass | 14,968 | 6,616 | -56% | 1 | 1 | 0% | 2,448 | 5,827 | +138% | 0 | 0 | — |
case-09 | fail→fail | 9,968 | 7,988 | -20% | 1 | 1 | 0% | 1,753 | 5,188 | +196% | 0 | 0 | — |
case-10 | fail→fail | 60,050 | 7,479 | -88% | 1 | 1 | 0% | 4,009 | 5,074 | +27% | 0 | 0 | — |
case-11 | fail→pass | 33,338 | 6,230 | -81% | 1 | 1 | 0% | 2,412 | 6,039 | +150% | 0 | 0 | — |
case-12 | fail→pass | 12,867 | 3,261 | -75% | 1 | 1 | 0% | 2,144 | 5,311 | +148% | 0 | 0 | — |
case-13 | fail→pass | 8,400 | 2,487 | -70% | 1 | 1 | 0% | 1,529 | 5,124 | +235% | 0 | 0 | — |
case-14 | fail→pass | 13,723 | 4,532 | -67% | 1 | 1 | 0% | 2,263 | 5,685 | +151% | 0 | 0 | — |
case-15 | fail→pass | 9,860 | 5,046 | -49% | 1 | 1 | 0% | 1,861 | 5,512 | +196% | 0 | 0 | — |
case-16 | fail→pass | 11,428 | 3,794 | -67% | 1 | 1 | 0% | 1,641 | 5,360 | +227% | 0 | 0 | — |
case-17 | pass→pass | 12,934 | 3,595 | -72% | 1 | 1 | 0% | 2,055 | 5,447 | +165% | 0 | 0 | — |
case-18 | fail→pass | 12,697 | 2,369 | -81% | 1 | 1 | 0% | 2,008 | 5,193 | +159% | 0 | 0 | — |
case-19 | fail→pass | 10,845 | 4,201 | -61% | 1 | 1 | 0% | 1,870 | 5,285 | +183% | 0 | 0 | — |
case-20 | fail→pass | 12,552 | 3,246 | -74% | 1 | 1 | 0% | 2,002 | 5,403 | +170% | 0 | 0 | — |
case-21 | fail→pass | 13,380 | 4,124 | -69% | 1 | 1 | 0% | 2,183 | 5,335 | +144% | 0 | 0 | — |
case-22 | pass→pass | 21,601 | 1,766 | -92% | 1 | 1 | 0% | 3,668 | 5,101 | +39% | 0 | 0 | — |
DecimalAI ran this skill against gemini-3.6-flash twice over the same eval suite — once with the skill loaded and once without — and compared the two runs case by case. 22 cases were attempted, and 19 counted toward the lift figure. The other 3 produced results that are not comparable between the two arms, so they are excluded from the headline rather than averaged into it. The headline lift of +64 percentage points is the difference between those two pass rates over the 19 comparable cases.
Without the skill loaded, the model failed this case. With it loaded, the same prompt on the same model passed. This is one improved case from the latest verified run; every case, including any that regressed, is in the table above.
Other measured skills in the registry, with their headline benchmark lift.