RevenueCat
Access your RevenueCat apps
- Category
- Finance
- Primary Subcategory
- Invoicing, Billing & Subscriptions
Integration details
Description
Set up RevenueCat, integrate it in your apps, and access and analyze data about your customers, revenue, purchases.
- Integration type
- Plugin
- Verification status
- Not applicable
- Platform
- ChatGPT
- Primary Subcategory
- Invoicing, Billing & Subscriptions
- Secondary Subcategories
- None listed
- Brand
- RevenueCat
- Access
- Account required
- First tracked
- 2026-09-26
- Tool count
- 116
- Geography
- US
The Primary Subcategory used for this profile’s headline score.
Other Subcategories where the Integration is listed.
Get alerts for RevenueCat
Get updates when RevenueCat’s Discoverability Score or category rank changes.
ChatGPT Plugin Discovery Score
ChatGPT Plugin discovery is coming soon
ChatGPT can surface a Plugin when it matches a user's request.Your Plugin Discovery Score measures how often yours appears.
No spam. Unsubscribe any time.
What discovery looks like

Competing in ChatGPT Invoicing, Billing & Subscriptions
View Category116 tools agents can invoke
Archives a product, making it inactive in RevenueCat without touching the store. Idempotent and reversible via `unarchive-product`. Fails with 422 while the product is attached to a package of a non-archived offering (the blocking offering ids come back in `referenced_object_ids`).
archive-product
Archives an entitlement, making it inactive, and returns the updated entitlement. Fails with 422 while active products are still attached — detach or archive those first. Idempotent and reversible via `unarchive-entitlement`.
archive-entitlement
Archives an in-app currency (virtual currency), making it inactive, and returns the updated currency. This is reversible: `unarchive-virtual-currency` restores the currency with its `code`, `name`, and `product_grants` intact.
archive-virtual-currency
Archives an offering, making it inactive so it is no longer returned by the SDK, and returns the updated offering. Reversible: use `unarchive-offering` to make it active again. Archived offerings cannot be updated with `update-offering`.
archive-offering
Sets a per-customer offering override, so this customer's app is served the given offering as its current offering instead of the one it would otherwise display. Pass `offering_id: null` to clear an existing override. Reversible and safe to repeat; no response body.
assign-customer-offering
Attaches products to a package and returns the updated package. Packages group equivalent products across stores/platforms, so you typically attach one product per store (with `eligibility_criteria` to target Google Play SDK versions). Attaching does not remove existing associations; use `detach-products-from-package` to undo.
attach-products-to-package
Attaches products to an entitlement so purchasing any of them unlocks it, and returns the updated entitlement. Existing purchases are recalculated asynchronously, so access changes may take a moment to propagate. Idempotent (already-attached products are skipped) and reversible via `detach-products-from-entitlement`. Fails with 422 if the entitlement or any product is archived.
attach-products-to-entitlement
Attaches an offering to a paywall so the paywall is served for that offering, and returns the updated paywall. Idempotent when the offering is already attached to this paywall. Fails with 409 if the paywall already has a different offering or the offering is attached to another paywall, and with 422 if the offering is archived.
attach-offering-to-paywall
Starts an async Paywall AI Editor task to create an unpublished RevenueCat paywall from a blank canvas, then returns a task ID. Image-heavy creation can take 5-10 minutes; do not call this tool again for the same request unless the task fails. Call get-paywall-ai-task with the returned task ID about every 30 seconds until it succeeds or fails. Pass a prompt describing what paywall to create. Pass an offering ID when available, otherwise the paywall is created as an unattached draft. Paywall AI Editor can also generate or replace paywall hero/background images when requested. Always send context: a call with neither app_context nor codebase_context usually comes back with a question instead of a paywall. Inspect the app/codebase first, fill every app_context field you can determine, and use codebase_context for anything app_context has no field for.
create-paywall-ai
Creates a new package for an offering. The convention for package identifiers in RevenueCat are: $rc_{product_duration} for durations: monthly, annual, three_month, two_month, lifetime, six_month, weekly. Try to use those if possible. If you need to create a custom package, use the provided lookup_key (refer to it as "identifier" in conversations) or create one that starts with $rc_custom_ and make sure it's unique and uses the display name provided.
create-packages
the created product — this only registers a product with RevenueCat; it does not create anything in the underlying store. Not idempotent: retrying with the same identifier fails with a conflict. For Stripe, RevenueCat selects a usable web price when possible. Provide `price_identifier` to require importing a specific existing price. Without it, the product is still created when Stripe cannot be queried or no price can be selected.
create-product
Creates a draft plan to create or update products in RevenueCat and the app stores from one or more desired product store states. Prefer this over set-product-store-state when the user wants to preview changes, modify multiple products, create missing RevenueCat products, or safely review store metadata before applying it. Provide `product_id` when the RevenueCat product ID is known. Alternatively, provide `create_revenuecat_product` with the app, store identifier, and product metadata; if a RevenueCat product already exists for that app and store identifier, the plan will target the existing product, otherwise the plan keeps it as a new RevenueCat product to create when applied. Set `store` to `app_store`, `play_store`, `rc_billing`, or `test_store` and populate the matching `store_state` payload. Ask the user if they want all territories or a specific set before setting `common.availability.territories`. For RC Billing (`rc_billing`) and Test Store (`test_store`), pricing is currency-keyed under `common.pricing.currency_prices` (create-only; updating an existing currency is rejected). For App Store auto-renewing subscriptions, send the prices to keep in `territory_prices` (at least `base_territory`, plus any custom regional overrides) and include `common.pricing.equalize_missing_subscription_prices` with that `base_territory` (e.g. `US`) so every other Apple territory is filled from that base at apply time. Those filled territories will not appear as individual plan diffs — only a summary line. Do not send that field for App Store one-time products (consumable, non-consumable, non-renewing): omit it, set `common.availability` to the territories the user wants, and send the source price in `territory_prices` (US becomes the schedule base when present; otherwise the first listed territory). Extra `territory_prices` entries are custom manual overrides; Apple fills remaining available territories from that base. For App Store subscription creation, provide `common.duration` using canonical ISO-like values such as `P1M`. Play Store currently supports subscriptions only (no consumables or non-consumables). For Play Store subscriptions: (1) provide at least one localization in `common.localizations` (keyed by locale, e.g. `en-US`) with a `name` (and optional `description`); (2) populate `store_state.play_store.base_plans` with an entry keyed by `base_plan_id` — typically a single entry for the targeted plan — and set `state` to `ACTIVE` by default (use `DRAFT` only when the user explicitly wants the base plan held back; `INACTIVE` is not yet supported on apply); (3) include a billing plan type on the base plan — exactly one of `auto_renewing_base_plan_type`, `prepaid_base_plan_type`, or `installments_base_plan_type`. This is required when creating a new subscription. On modify, if the caller omits the billing plan type it is carried forward from the live Play Store state, but always ask the user for the billing period upfront. The most common is `auto_renewing_base_plan_type`, e.g. `{ "billing_period_duration": "P1M", "grace_period_duration": "P3D", "account_hold_duration": "P30D", "proration_mode": "SUBSCRIPTION_PRORATION_MODE_CHARGE_ON_NEXT_BILLING_DATE", "resubscribe_state": "RESUBSCRIBE_STATE_ACTIVE", "legacy_compatible": false, "legacy_compatible_subscription_offer_id": null }`. Only `billing_period_duration` (ISO-8601, e.g. `P1M`) is required; the rest are optional and default to Google's defaults when omitted. `prepaid_base_plan_type` requires `billing_period_duration` (optional `time_extension`). `installments_base_plan_type` additionally requires `committed_payments_count` and `renewal_type` (one of `RENEWAL_TYPE_RENEWS_WITHOUT_COMMITMENT`, `RENEWAL_TYPE_RENEWS_WITH_COMMITMENT`). (4) put the targeted base plan's prices and availability in `common.pricing.territory_prices[region]` and `common.availability.territories[region]` (each price needs `amount_micros` and `currency`). Plan diffs, warnings, and the review UI read those common fields. Use `store_state.play_store.base_plans[base_plan_id].regional_configs[region]` only as an apply-time override for other base plans or per-plan divergence — not as the only place to set the targeted plan's price or availability. When using `create_revenuecat_product` for Play Store, `store_identifier` must be in the form `<subscription_id>:<base_plan_id>` (e.g. `pro_monthly:monthly`). For App Store review screenshots, omit screenshot so apply can upload a blank placeholder. Do not use set-product-store-state or screenshot_upload. After creating the draft, call plan-product-store-state-plan, then poll get-product-store-state-plan until it reaches `planned`, `planned_and_finished`, or `plan_errored`. If this app already has a plan in `plan_errored` or `apply_errored`, that plan is discarded automatically so a new draft can be created. The response includes `discarded_plan` with that plan's `id` and previous `status`; otherwise `discarded_plan` is null. Discarding an `apply_errored` plan does not roll back store changes that already landed (`plan_items[].apply_status=applied`). A 423 means a live plan is still in progress — GET it and follow `actions` (discard, apply, or plan) before creating another.
create-product-store-state-plan
Creates a targeting rule for a project. The rule can be created as active or inactive and can target by conditions, audience, schedule, and placement overrides.
create-targeting-rule
Creates a webhook integration that starts delivering RevenueCat events to the given `url`; omitted/`null` filters mean all events, environments, and apps. `name` and `url` are unique per project, so re-posting either fails with 409 `resource_already_exists`. Use `update-webhook-integration` to change an existing one. The `Authorization` header sent with deliveries cannot be set through this tool: configure it in the webhook's settings in the RevenueCat dashboard.
create-webhook-integration
Creates a new app inside a project and returns it. Alongside `name` and `type`, send the matching store-specific object with the platform's identifiers. For App Store apps, reuse a sibling app's credentials in this project with `app_store.copy_app_store_connect_api_key_from_app_id` or `app_store.copy_subscription_key_from_app_id`. Configure new credentials in the app's settings in the RevenueCat dashboard. Fails if the name is already used for that type or the bundle ID / package name is already registered in the project.
create-app
Creates a new audience (a saved customer segment) from a `name` and membership `rules`, and returns it. Call `get-audience-filter-options` first to discover valid values for data-derived rule fields. Not idempotent: repeated calls create duplicate audiences.
create-audience
Creates a new entitlement. See RevenueCat's Entitlements docs for more details. In conversations, refer to `lookup_key` as "identifier".
create-entitlement
Creates a draft experiment. Use `list-offerings` to find existing offering IDs for its variants. This does not start the experiment. **Experiment types** Set `experiment_type` to whatever best matches what the variants change, and prefer its recommended metrics unless the user asks for something else: - `introductory_offer` — discounts the first period to test the impact on lifetime value. - Recommended primary metric: `realized_ltv_per_customer` - Recommended secondary metrics: `conversion_to_paying`, `trials_started`, `active_subscribers` - `free_trial_offer` — changes or removes free trials to measure the impact on sign-ups and retention. - Recommended primary metric: `realized_ltv_per_customer` - Recommended secondary metrics: `active_subscribers` - `paywall_design` — tests paywall layouts, visuals, or copy to boost conversions. - Recommended primary metric: `initial_conversion_rate` - Recommended secondary metrics: `realized_ltv_per_customer`, `exposed_customers` - `price_point` — tries different prices to maximize revenue. - Recommended primary metric: `realized_ltv_per_customer` - Recommended secondary metrics: `conversion_to_paying`, `realized_ltv_per_paying_customer` - `subscription_duration` — compares subscription durations (e.g. monthly vs. annual) to identify the healthiest business outcome. - Recommended primary metric: `realized_ltv_per_customer` - Recommended secondary metrics: `conversion_to_paying` - `subscription_ordering` — reorders or changes the presented options to improve plan selection. - Recommended primary metric: `realized_ltv_per_customer` - Recommended secondary metrics: `conversion_to_paying` - `other` — anything that doesn't fit the presets; choose the metrics that best match what is being tested.
create-experiment
Creates an in-app currency (virtual currency) in the project and returns the created currency. The `code` permanently identifies the currency in all other in-app currency endpoints and cannot be changed later. This defines the project-level currency only; customer balances are read via the customer in-app currency endpoints.
create-virtual-currency
Creates a new offering. See RevenueCat's Offerings docs for more details. In conversations, refer to `lookup_key` as "identifier".
create-offering
Deprecated. Prefer product-store-state-plan tools (create, plan, apply) for previewable store changes. Configure prices for a product. This tool only works with products configured in an app type test_store. Calling this tool on products belonging to any other app type will cause an error.
create-product-prices
Creates a new RevenueCat project — the top-level container that apps, products, entitlements, and offerings live under — and returns it; use the returned `id` with `create-app` to add apps. Not idempotent — repeated calls create duplicate projects with the same name.
create-project
Permanently deletes a package from its offering. Destructive and not reversible — the package and its product associations are removed, though the attached products themselves are not deleted. To change which products a package sells without deleting it, use `attach-products-to-package` / `detach-products-from-package` instead.
delete-package-from-offering
Deletes one targeting rule from a project.
delete-targeting-rule
Permanently deletes a webhook integration and stops all event deliveries to its URL. Destructive and not reversible — the configuration and its signing secret cannot be recovered. If you only want to pause or narrow deliveries, use `update-webhook-integration` instead.
delete-webhook-integration
Detaches products from an entitlement so purchasing them no longer unlocks it, and returns the updated entitlement. Existing purchases are recalculated asynchronously and customers can lose access — treat this as a customer-impacting change. Idempotent (ids not currently attached are ignored) and reversible via `attach-products-to-entitlement`.
detach-products-from-entitlement
Detaches products from a package and returns the updated package. Only the package-product associations are removed — the products themselves are not deleted and can be re-attached later with `attach-products-to-package`. Use `delete-package-from-offering` instead to remove the whole package.
detach-products-from-package
Detaches the offering from a paywall and returns the updated paywall. Idempotent when the paywall has no offering. Fails with 409 if the paywall is published; unpublish it first.
detach-offering-from-paywall
Discards a product store state plan that is no longer needed and is in a discardable state. Use this to clean up drafts, in-flight, planned, expired, or errored plans that the user does not want to apply. Discarding does not apply any store changes and does not undo a plan that has already been applied.
discard-product-store-state-plan
Duplicates an existing paywall into a new, unpublished paywall in the same project. By default the current draft is duplicated; set `source_version` to `published` to duplicate the currently published version instead. By default the duplicate is not attached to an offering; provide `offering` to also duplicate the source paywall's offering (packages only) and attach the new paywall to it.
duplicate-paywall
Duplicates an offering and its related entities into a new, non-current offering in the same project: - Packages (attaching the same existing products, not creating new products). - The attached paywall, copied as a new unpublished draft (unless `include_paywall` is false, in which case the new offering won't be attached to any paywall). By default the paywall's current draft is copied; set `source_paywall_version` to `published` to copy its currently published version instead. Workflow-generated paywalls are never copied. - RC Billing Checkout Configuration, if the source offering has one (unless `include_paywall` is false).
duplicate-offering
Starts an async Paywall AI Editor task to update an existing RevenueCat paywall, then returns a task ID. If the paywall is published, the published components are edited and saved as a draft. Image-generation edits can take several minutes; do not call this tool again for the same request unless the task fails. Call get-paywall-ai-task with the returned task ID about every 10-15 seconds until it succeeds or fails. Paywall AI Editor can generate, replace, or update paywall hero/background images when the prompt asks for it. Always send context alongside the requested edit, since it preserves product, brand, audience, and visual fit. Fill every app_context field you can determine, and use codebase_context for anything app_context has no field for.
edit-paywall-ai
Deprecated. Prefer product-store-state-plan tools (create, plan, apply) for previewable store changes. Fills missing App Store auto-renewing subscription territory prices by applying Apple equalizations from the current price configured in `base_territory`. Do not use this for one-time products (consumable, non-consumable, non-renewing); Apple already fills those from the IAP price schedule base territory. Set availability and send the source price in `territory_prices` instead (US becomes the schedule base when present). Recommended flow: 1) Call get-product-store-state and inspect `warnings`. 2) If warnings indicate missing subscription territory pricing coverage, call this endpoint. 3) Poll get-product-store-state-operation until status is 'succeeded' or 'failed'.
equalize-subscription-prices
Get LLM-friendly option schema for a chart. Returns compact metadata for filters and segments without enumerating large value lists.
get-chart-options-schema
Checks a Paywall AI Editor task returned by create-paywall-ai or edit-paywall-ai. If the task is still running, wait for poll_after_ms/the suggested retry delay and call this tool again; keep polling until the task succeeds or fails, even if it takes several minutes. If it succeeded, this returns the saved paywall draft details and screenshots.
get-paywall-ai-task
Returns the Refund Control preferences configured for a project, including the default handling preference and any audience-specific policies in priority order. Use this to answer questions about how RevenueCat handles App Store and Play Store refund requests for the project.
get-refund-request-preferences
Lists SDK feature gates for a project, including minimum SDK requirements and whether each gate should be shown in the project's SDK compatibility table.
list-sdk-feature-gates
Lists SDK version distribution data for a project. Supports grouping by SDK type, platform, or platform flavor; each entry includes subscriber counts and percentage of project subscribers seen in the last 30 days.
list-sdk-versions
Returns detailed customer information customer (attributes, entitlements, metadata)
get-customer
Lists the apps in a project. Each app is polymorphic on `type`, with store-specific details nested under a field named after the type (e.g. `app_store.bundle_id`). Use it to discover `app_id` values and which apps already have an App Store Connect key (`app_store.app_store_connect_api_key_configured`). Prefer `get-app` when you already know the id.
list-apps
Returns all audiences in the project — saved customer segments defined by filter `rules`. Not paginated. Use this to find segments; to look up individual customers by email or app user ID, use `list-customers` instead.
list-audiences
Lists the people with access to a project, including the project owner, with each collaborator's email and role. `accepted_at` is null while the invitation is still pending.
list-collaborators
Returns the customer's in-app currency (virtual currency) balances. Currencies with a zero balance are omitted unless `include_empty_balances=true`. For the project's in-app currency definitions (rather than a customer's balances) use `list-virtual-currencies`.
list-virtual-currencies-balances
Lists all entitlements in a project — the levels of access customers unlock by purchasing the products attached to them. Refer to each entitlement's `lookup_key` as "identifier" in conversations. Use `get-entitlement` instead when you already know the entitlement id.
list-entitlements
Returns the project's experiments (A/B tests of offerings, prices, and paywalls), optionally filtered by status. Each item includes the variant offerings (`offering_a` = control) and targeting. Configuration only — use `get-experiment-results` for per-variant performance data.
list-experiments
Lists the in-app currencies (virtual currencies) available for the project.
list-virtual-currencies
Returns the list of offerings in a project. Offerings group the packages that can be shown on a paywall; `is_current` marks the default offering served to apps. Refer to `lookup_key` as "identifier" in conversations. Use `get-offering` when you already know the offering id.
list-offerings
Returns the list of packages in an offering. Packages group the equivalent products sold across stores/platforms; `position` is the package's order within the offering. Refer to `lookup_key` as "identifier" in conversations.
list-packages
Returns the list of paywalls in a project — the UI configurations built in the RevenueCat dashboard's paywall editor. Read-only; `published_at` is null if the paywall was never published. Use `get-paywall` to inspect a specific paywall's component configuration.
list-paywalls
Returns the in-app purchase and subscription products registered in a project's app catalog (store SKUs) — not to be confused with `list-projects`, which lists the projects on the account. Optionally filter by `app_id` to scope results to a single app.
list-products
How do I improve a ChatGPT Plugin's discoverability?
The levers are the listing surface agents actually read: names, descriptions, keywords, tool metadata, and registry health. Which lever matters depends on where discovery breaks, which is what continuous measurement shows.
What are RevenueCat alternatives on ChatGPT?
As of 2026-09-26, RevenueCat competes with Billabex, Chargebee (AU Region), Chargebee (EU Region), Chargebee (US Region), Elevate Invoices, Every AI, Fakturoid, GST Invoice Maker, HoneyBook, Hyperline, Ignition, InvoiceCraft AI, InvoiceSonic, Setu Bharat Connect BillPay, Spiffy, SubscriptionFlow, Tabs, The Kingdom Bank in ChatGPT Invoicing, Billing & Subscriptions, ranked by public Discoverability Score.
Where is this profile measured?
This profile uses the geography attached to the latest public registry snapshot: US. Locale tags are intentionally omitted.