revenuecat
Use when checking subscription metrics (MRR, revenue, active subscriptions, trials), looking up why a specific user does or does not have Pro, granting…
Skill by tirupati17
Chalk Labs
Need help deploying revenuecat?
Chalk Labs sets up agents like this inside real teams: connected to your tools, tested on your data, with a human in the loop where it matters.
Install
Works with Claude Code, Claude apps, Codex, Cursor, Gemini CLI, GitHub Copilot, VS Code, OpenCode, Goose, Windsurf. Read the repository before you give any tool access to your data.
npx agentmarket install skill/tirupati17-revenuecat
Asks which of your tools to add it to (Claude Code, Codex, Cursor, VS Code, Windsurf, Gemini CLI, Claude Desktop) and shows the change first. See https://agentmart.dev/cli.
Get the weekly diff
The weekly diff: one email a week with new agent tools, notable updates and grade changes, plus security alerts for tools you follow. Double opt-in, one-click unsubscribe.
About
Reviews
Write a reviewNo reviews yet. Installed it? Reviews come from verified installers only. How reviews work
Permissions
What this skill can do and what it asks for, from its SKILL.md. Checked Oct 25, 2026.
- Tools
- No tools found
- Secrets
- None asked for
- Install scripts
- None found
Network hosts it talks to 1
codeload.github.com· found in install command
Files it touches
~/.claude/skills/revenuecat
What's inside
- Skill name
revenuecat- Description
- Use when checking subscription metrics (MRR, revenue, active subscriptions, trials), looking up why a specific user does or does not have Pro, granting someone an entitlement for free (promo, support, giveaway, lifetime), listing products or offerings, or when a purchase, entitlement or webhook in RevenueCat does not behave as expected.
- License
- MIT
- Instructions
- 67 lines in SKILL.md · view on GitHub
Files (1)
- SKILL.md
SKILL.md (first lines)
# RevenueCat: metrics, customers, promotional grants, catalogue
## Credentials
`cpm creds setup revenuecat` asks for each one and says where it lives:
| Name | Where to get it |
|---|---|
| `REVENUECAT_API_KEY` | Project settings > API keys > **+ New secret API key**, version **v2**. Give it only what the task needs: `customer_information` read (customer), `charts_metrics` read (metrics), `project_configuration` read (products, offerings, entitlements), and customer_information **write** only if you will grant. |
| `REVENUECAT_PROJECT_ID` | The `proj...` id in the dashboard URL: `app.revenuecat.com/projects/<id>/...`. |
| `REVENUECAT_V1_API_KEY` | Optional. A legacy **v1** secret key from the same page. Only a lifetime grant uses v1; without it the v2 key is tried there, and v1 may refuse it. |
Secret keys are server-side only. The public SDK keys (`appl_`, `goog_`) in the
app cannot do any of this and should never be used here.
## Commands
```bash
cpm revenuecat metrics # overview: MRR, 28-day revenue, active subs/trials
cpm revenuecat customer <app_user_id> # entitlements, subscriptions, one-time purchases
cpm revenuecat products # every product, per app and store
cpm revenuecat offerings # offerings > packages > products, current marked *
cpm revenuecat grant <id> <entitlement> --duration monthly # dry run
cpm revenuecat grant <id> <entitlement> --until 2027-01-31 --commit
cpm revenuecat grant <id> <entitlement> --duration lifetime --commit # v1
```
Every read takes `--json` for the raw response. `grant` is a dry run unless
`--commit`; it still resolves the entitlement (a read) so the dry run shows the
exact body.
**API versions.** Everything is v2 except a lifetime grant. v2's
`customers/{id}/actions/grant_entitlement` takes an `expires_at`, not a duration,
so "lifetime" has no v2 form; it goes to v1
`subscribers/{id}/entitlements/{identifier}/promotional` with `duration: lifetime`.
`--api v1|v2` forces one.
## Traps
- **"The paid user has no Pro."** App user ids are exact and case-sensitive. A
UUID logged in upper case on one platform and lower case on another is two
customers. Run `customer` with each spelling before anything else.
- **A grant is not a purchase.** No store transaction, no revenue, no
INITIAL_PURCHASE webhook, and store refunds cannot remove it. Anything counting
"paying users" from webhooks will not see grants. Revoke in the dashboard.
- **Why grants exist at all:** a store non-consumable (lifetime) cannot be priced
at zero or carry an intro offer. A free lifetime has to be a promotional grant,
and any endpoint that issues them must check server-side that the promo is live
and be idempotent per user, or it is a free-Pro button.
- **Webhooks see store ids, not RevenueCat ids.** Play subscriptions arrive as
`subscription:base-plan`, one-time products bare. Code that maps products by
substring (monthly/yearly/lifetime) breaks the day an id is named differently;
check `products` when adding one.
- **The current offering can be named anything.** Do not hardcode `default`.
- **No direct Google Ads integration.** RevenueCat's attribution integrations
include Meta Ads but not Google Ads. The path is RevenueCat > Firebase / GA4
(Measurement Protocol) > import `purchase` into Google Ads, and RevenueCat drops
those events silently unless the app sets `$firebaseAppInstanceId` on the
customer.
- **Test prices do not prove live prices.** A local StoreKit or sandbox fixture
drifts from the store. Neither RevenueCat's API nor metrics give list prices;
ask the owner or read the store console.
- **Reinstall can orphan balances.** Entitlements restore from the store, but
anything keyed on an anonymous app user id (credits, hours) is lost if the id
does not survive reinstall. Log users in with a stable id.From tirupati17/cpm, MIT.
More from tirupati17/cpm
- 0.565score
google-ads
tirupati17
Use when checking or changing Google Ads from the terminal (campaign spend, clicks and conversions, pausing or enabling a campaign, changing a daily budget…
SkillAFreshness: AClaude Code +9 - 0.565score
amplitude
tirupati17
Use when listing or checking Amplitude Experiment feature flags, turning a flag on or off (kill switch, rollout), shipping code that is gated behind a new…
SkillAFreshness: AClaude Code +9 - 0.565score
appstore-release
tirupati17
Use when shipping an iOS app to App Store review (archive, upload, attach the build, write What's New, submit), updating localized descriptions, keywords or…
SkillAFreshness: AClaude Code +9 - 0.565score
gcp
tirupati17
Use when a tool needs a Google Cloud service account (Google Play publishing, RevenueCat purchase validation, Firebase, any Google API), when checking which…
SkillAFreshness: AClaude Code +9 - 0.565score
onesignal
tirupati17
Use when sending a push notification to a specific user, a list of users, a segment or everyone; when checking how many devices can receive push or whether…
SkillAFreshness: AClaude Code +9 - 0.565score
play-release
tirupati17
Use when publishing an Android app to Google Play (upload an AAB to internal, alpha, beta or production, staged rollout), when changing the Play listing text…
SkillAFreshness: AClaude Code +9 - 0.560score
cpm-learn
tirupati17
Use right after finishing a task that took real effort against an external service or API (a store console, billing, ads, analytics, push, cloud) and that is…
SkillAFreshness: AClaude Code +9 - 0.560score
service-task
tirupati17
One sentence an agent can match against a request.
SkillAFreshness: AClaude Code +9
Signals
- Stars
- 0
- Forks
- 0
- Open issues
- 0
- Last commit (this folder)
- Sep 27, 2026 (1 month ago)
From GitHub (fetched Oct 24, 2026).
Details
- License
- MIT
- Repository
- github.com/tirupati17/cpm
- First seen
- Oct 24, 2026
- Last checked
- Oct 24, 2026
- Source
- GitHubgithub-graphql
More from tirupati17
- 0.565score
google-ads
tirupati17
Use when checking or changing Google Ads from the terminal (campaign spend, clicks and conversions, pausing or enabling a campaign, changing a daily budget…
SkillAFreshness: AClaude Code +9 - 0.565score
amplitude
tirupati17
Use when listing or checking Amplitude Experiment feature flags, turning a flag on or off (kill switch, rollout), shipping code that is gated behind a new…
SkillAFreshness: AClaude Code +9 - 0.565score
appstore-release
tirupati17
Use when shipping an iOS app to App Store review (archive, upload, attach the build, write What's New, submit), updating localized descriptions, keywords or…
SkillAFreshness: AClaude Code +9 - 0.565score
gcp
tirupati17
Use when a tool needs a Google Cloud service account (Google Play publishing, RevenueCat purchase validation, Firebase, any Google API), when checking which…
SkillAFreshness: AClaude Code +9 - 0.565score
onesignal
tirupati17
Use when sending a push notification to a specific user, a list of users, a segment or everyone; when checking how many devices can receive push or whether…
SkillAFreshness: AClaude Code +9 - 0.565score
play-release
tirupati17
Use when publishing an Android app to Google Play (upload an AAB to internal, alpha, beta or production, staged rollout), when changing the Play listing text…
SkillAFreshness: AClaude Code +9
Done for you
Rather not set it up yourself?
Chalk Labs scopes, builds and runs agents for your team: the task audit, the eval harness, the integrations and the weekly ops report. Fixed scope, priced before we start.
See how we build AI agents →Read the case studies
Chalk Labs is a two-founder AI and growth studio. We build AI agents, CRMs and MVPs for Web3 and AI companies, and have shipped 50+ product and token launches.
- launches shipped
- 50+
- launches shipped
- media placements
- 500+
- media placements
- founders on every account
- 2
- founders on every account
Press we've placed: Forbes · CoinDesk · Decrypt · Cointelegraph · The Block
Rahil Jain, Co-founder, Chalk Labs. Ex-Goldman Sachs engineer. You talk to the person who builds it.
Get revenuecat running in your business
Tell us what you want to automate. A founder replies within one working day with a plan, not a pitch deck.
Cite this page
revenuecat skill. Agent Mart. https://agentmart.dev/skills/tirupati17-revenuecat (last updated 2026-10-24)