{"id":"b7f2ea66-2ba0-4bba-a1e0-ddfd9a82f7b9","shortId":"kHfqLZ","kind":"skill","title":"asc-revenuecat-catalog-sync","tagline":"Reconcile App Store Connect subscriptions and in-app purchases with RevenueCat products, entitlements, offerings, and packages using asc and RevenueCat MCP. Use when setting up or syncing subscription catalogs across ASC and RevenueCat.","description":"# asc RevenueCat catalog sync\n\nUse this skill to keep App Store Connect (ASC) and RevenueCat aligned, including creating missing ASC items and mapping them to RevenueCat resources.\n\n## When to use\n- You want to bootstrap RevenueCat from an existing ASC catalog.\n- You want to create missing ASC subscriptions/IAPs, then map them into RevenueCat.\n- You need a drift audit before release.\n- You want deterministic product mapping based on identifiers.\n\n## Preconditions\n- `asc` authentication is configured (`asc auth login` or `ASC_*` env vars).\n- RevenueCat MCP server is configured and authenticated.\n- In Cursor and VS Code, OAuth auth is available for RevenueCat MCP. API key auth is also supported.\n- You know:\n  - ASC app ID (`APP_ID`)\n  - RevenueCat `project_id`\n  - target RevenueCat app type (`app_store` or `mac_app_store`) and bundle ID for create flows\n- Use a write-enabled RevenueCat API v2 key when applying changes.\n\n## Safety defaults\n- Start in **audit mode** (read-only).\n- Require explicit confirmation before writes.\n- Never delete resources in this workflow.\n- Continue on per-item failures and report all failures at the end.\n\n## Canonical identifiers\n- Primary cross-system key: ASC `productId` == RevenueCat `store_identifier`.\n- Keep `productId` stable once products are live.\n- Do not use display names as unique identifiers.\n\n## Scope boundary\n- RevenueCat MCP configures RevenueCat resources; it does not create App Store Connect products directly.\n- Use `asc` commands to create missing ASC subscription groups, subscriptions, and IAPs before RevenueCat mapping.\n\n## Modes\n\n### 1) Audit mode (default)\n1. Read ASC source catalog.\n2. Read RevenueCat target catalog.\n3. Build a diff with actions:\n   - missing in ASC\n   - missing in RevenueCat\n   - mapping conflicts (identifier/type/app mismatch)\n4. Present a plan and wait for confirmation.\n\n### 2) Apply mode (explicit)\nExecute approved actions in this order:\n1. Ensure ASC groups/subscriptions/IAP exist.\n2. Ensure RevenueCat app/products exist.\n3. Ensure entitlements and product attachments.\n4. Ensure offerings/packages and package attachments.\n5. Verify and print a final reconciliation summary.\n\n## Step-by-step workflow\n\n### Step A - Read current ASC catalog\n\n```bash\nasc subscriptions groups list --app \"APP_ID\" --paginate --output json\nasc iap list --app \"APP_ID\" --paginate --output json\n# for each subscription group:\nasc subscriptions list --group-id \"GROUP_ID\" --paginate --output json\n```\n\n### Step B - Read current RevenueCat catalog (MCP)\n\nUse these MCP tools (with `project_id` and pagination where applicable):\n- `mcp_RC_get_project`\n- `mcp_RC_list_apps`\n- `mcp_RC_list_products`\n- `mcp_RC_list_entitlements`\n- `mcp_RC_list_offerings`\n- `mcp_RC_list_packages`\n\n### Step C - Build mapping plan\n\nMap ASC product types to RevenueCat product types:\n- ASC subscription -> RevenueCat `subscription`\n- ASC IAP `CONSUMABLE` -> RevenueCat `consumable`\n- ASC IAP `NON_CONSUMABLE` -> RevenueCat `non_consumable`\n- ASC IAP `NON_RENEWING_SUBSCRIPTION` -> RevenueCat `non_renewing_subscription`\n\nSuggested entitlement policy:\n- subscriptions: one entitlement per subscription group (or explicit map provided by user)\n- non-consumable IAP: one entitlement per product\n- consumable IAP: no entitlement by default unless user asks\n\n### Step D - Ensure missing ASC items (if requested)\n\nCreate missing ASC resources first, then re-read ASC to capture canonical IDs.\n\n```bash\n# create subscription group\nasc subscriptions groups create --app \"APP_ID\" --reference-name \"Premium\"\n\n# create subscription\nasc subscriptions create \\\n  --group-id \"GROUP_ID\" \\\n  --reference-name \"Monthly\" \\\n  --product-id \"com.example.premium.monthly\" \\\n  --subscription-period ONE_MONTH\n\n# create iap\nasc iap create \\\n  --app \"APP_ID\" \\\n  --type NON_CONSUMABLE \\\n  --ref-name \"Lifetime\" \\\n  --product-id \"com.example.lifetime\"\n```\n\n### Step E - Ensure RevenueCat app and products\n\nUse MCP:\n- create app if missing: `mcp_RC_create_app`\n- create products: `mcp_RC_create_product`\n  - `store_identifier` = ASC `productId`\n  - `app_id` = RevenueCat app ID\n  - `type` from mapping above\n\n### Step F - Ensure entitlements and attachments\n\nUse MCP:\n- list/create entitlements: `mcp_RC_list_entitlements`, `mcp_RC_create_entitlement`\n- attach products: `mcp_RC_attach_products_to_entitlement`\n- verify attachments: `mcp_RC_get_products_from_entitlement`\n\n### Step G - Ensure offerings and packages (optional)\n\nUse MCP:\n- list/create/update offerings:\n  - `mcp_RC_list_offerings`\n  - `mcp_RC_create_offering`\n  - `mcp_RC_update_offering` (`is_current=true` only if requested)\n- list/create packages:\n  - `mcp_RC_list_packages`\n  - `mcp_RC_create_package`\n- attach products to packages:\n  - `mcp_RC_attach_products_to_package` with `eligibility_criteria: \"all\"`\n\nRecommended package keys:\n- `ONE_WEEK` -> `$rc_weekly`\n- `ONE_MONTH` -> `$rc_monthly`\n- `TWO_MONTHS` -> `$rc_two_month`\n- `THREE_MONTHS` -> `$rc_three_month`\n- `SIX_MONTHS` -> `$rc_six_month`\n- `ONE_YEAR` -> `$rc_annual`\n- lifetime IAP -> `$rc_lifetime`\n- custom -> `$rc_custom_<name>`\n\n## Expected output format\n\nReturn a final summary with:\n- ASC created counts (groups/subscriptions/IAP)\n- RevenueCat created counts (apps/products/entitlements/offerings/packages)\n- attachment counts (entitlement-products, package-products)\n- skipped existing items\n- failed items with actionable errors\n\nExample:\n\n```text\nASC: created groups=1 subscriptions=2 iap=1, skipped=14, failed=0\nRC: created apps=0 products=3 entitlements=2 offerings=1 packages=2, skipped=27, failed=1\nAttachments: entitlement_products=3 package_products=2\nFailures:\n- com.example.premium.annual: duplicate store_identifier exists on another RC app\n```\n\n## Agent behavior\n- Always run audit first, even in apply mode.\n- Ask for confirmation before create/update operations.\n- Match by `store_identifier` first.\n- Use full pagination (`--paginate` for ASC, `starting_after` for RevenueCat tools).\n- Continue processing after per-item failures and report all failures together.\n- Never auto-delete ASC or RevenueCat resources in this skill.\n\n## Common pitfalls\n- Wrong RevenueCat `project_id` or app ID.\n- Creating RC products under the wrong platform app.\n- Accidentally assigning consumables to entitlements.\n- Skipping the post-create ASC re-read step.\n- Missing offering/package verification after product creation.\n\n## Additional resources\n- Workflow examples: [examples.md](examples.md)\n- Source references: [references.md](references.md)","tags":["asc","revenuecat","catalog","sync","app","store","connect","cli","skills","rorkai","agent-skills","ai-skills"],"capabilities":["skill","source-rorkai","skill-asc-revenuecat-catalog-sync","topic-agent-skills","topic-ai-skills","topic-app-store-connect","topic-apple","topic-asc","topic-automation","topic-cicd","topic-cli","topic-devops","topic-ios","topic-macos","topic-testflight"],"categories":["app-store-connect-cli-skills"],"synonyms":[],"warnings":[],"endpointUrl":"https://skills.sh/rorkai/app-store-connect-cli-skills/asc-revenuecat-catalog-sync","protocol":"skill","transport":"skills-sh","auth":{"type":"none","details":{"cli":"npx skills add rorkai/app-store-connect-cli-skills","source_repo":"https://github.com/rorkai/app-store-connect-cli-skills","install_from":"skills.sh"}},"qualityScore":"0.700","qualityRationale":"deterministic score 0.70 from registry signals: · indexed on github topic:agent-skills · 776 github stars · SKILL.md body (6,517 chars)","verified":false,"liveness":"unknown","lastLivenessCheck":null,"agentReviews":{"count":0,"score_avg":null,"cost_usd_avg":null,"success_rate":null,"latency_p50_ms":null,"narrative_summary":null,"summary_updated_at":null},"enrichmentModel":"deterministic:skill-github:v1","enrichmentVersion":1,"enrichedAt":"2026-05-02T18:53:02.573Z","embedding":null,"createdAt":"2026-04-18T21:56:49.039Z","updatedAt":"2026-05-02T18:53:02.573Z","lastSeenAt":"2026-05-02T18:53:02.573Z","tsv":"'0':794,798 '1':274,278,322,786,790,804,810 '14':792 '2':283,312,327,788,802,806,817 '27':808 '3':288,332,800,814 '4':304,338 '5':344 'accident':900 'across':36 'action':293,318,779 'addit':921 'agent':828 'align':55 'also':142 'alway':830 'annual':741 'anoth':825 'api':138,176 'app':7,14,49,147,149,156,158,162,253,368,369,377,378,423,540,541,575,576,593,599,605,616,619,797,827,890,899 'app/products':330 'appli':180,313,836 'applic':415 'approv':317 'apps/products/entitlements/offerings/packages':764 'asc':2,24,37,40,52,59,78,85,108,112,116,146,222,259,264,280,296,324,361,364,374,387,446,453,457,462,469,514,520,527,536,549,572,614,757,783,854,876,910 'asc-revenuecat-catalog-sync':1 'ask':509,838 'assign':901 'attach':337,343,630,643,647,652,698,704,765,811 'audit':96,186,275,832 'auth':113,132,140 'authent':109,125 'auto':874 'auto-delet':873 'avail':134 'b':399 'base':104 'bash':363,532 'behavior':829 'bootstrap':73 'boundari':243 'build':289,442 'bundl':165 'c':441 'canon':215,530 'captur':529 'catalog':4,35,42,79,282,287,362,403 'chang':181 'code':130 'com.example.lifetime':588 'com.example.premium.annual':819 'com.example.premium.monthly':564 'command':260 'common':883 'configur':111,123,246 'confirm':193,311,840 'conflict':301 'connect':9,51,255 'consum':459,461,465,468,495,501,580,902 'continu':202,860 'count':759,763,766 'creat':57,83,168,252,262,518,533,539,547,551,570,574,598,604,606,610,641,676,696,758,762,784,796,892,909 'create/update':842 'creation':920 'criteria':710 'cross':219 'cross-system':218 'current':360,401,683 'cursor':127 'custom':746,748 'd':511 'default':183,277,506 'delet':197,875 'determinist':101 'diff':291 'direct':257 'display':237 'drift':95 'duplic':820 'e':590 'elig':709 'enabl':174 'end':214 'ensur':323,328,333,339,512,591,627,661 'entitl':19,334,431,479,483,498,504,628,634,638,642,650,658,768,801,812,904 'entitlement-product':767 'env':117 'error':780 'even':834 'exampl':781,924 'examples.md':925,926 'execut':316 'exist':77,326,331,774,823 'expect':749 'explicit':192,315,488 'f':626 'fail':776,793,809 'failur':207,211,818,866,870 'final':349,754 'first':522,833,848 'flow':169 'format':751 'full':850 'g':660 'get':418,655 'group':266,366,386,391,393,486,535,538,553,555,785 'group-id':390,552 'groups/subscriptions/iap':325,760 'iap':269,375,458,463,470,496,502,571,573,743,789 'id':148,150,153,166,370,379,392,394,411,531,542,554,556,563,577,587,617,620,888,891 'identifi':106,216,226,241,613,822,847 'identifier/type/app':302 'in-app':12 'includ':56 'item':60,206,515,775,777,865 'json':373,382,397 'keep':48,227 'key':139,178,221,714 'know':145 'lifetim':584,742,745 'list':367,376,389,422,426,430,434,438,637,672,692 'list/create':633,688 'list/create/update':668 'live':233 'login':114 'mac':161 'map':62,88,103,272,300,443,445,489,623 'match':844 'mcp':27,120,137,245,404,407,416,420,424,428,432,436,597,602,608,632,635,639,645,653,667,670,674,678,690,694,702 'mismatch':303 'miss':58,84,263,294,297,513,519,601,915 'mode':187,273,276,314,837 'month':560,569,720,722,724,727,729,732,734,737 'name':238,545,559,583 'need':93 'never':196,872 'non':464,467,471,475,494,579 'non-consum':493 'oauth':131 'offer':20,435,662,669,673,677,681,803 'offering/package':916 'offerings/packages':340 'one':482,497,568,715,719,738 'oper':843 'option':665 'order':321 'output':372,381,396,750 'packag':22,342,439,664,689,693,697,701,707,713,771,805,815 'package-product':770 'pagin':371,380,395,413,851,852 'per':205,484,499,864 'per-item':204,863 'period':567 'pitfal':884 'plan':307,444 'platform':898 'polici':480 'post':908 'post-creat':907 'precondit':107 'premium':546 'present':305 'primari':217 'print':347 'process':861 'product':18,102,231,256,336,427,447,451,500,562,586,595,607,611,644,648,656,699,705,769,772,799,813,816,894,919 'product-id':561,585 'productid':223,228,615 'project':152,410,419,887 'provid':490 'purchas':15 'rc':417,421,425,429,433,437,603,609,636,640,646,654,671,675,679,691,695,703,717,721,725,730,735,740,744,747,795,826,893 're':525,912 're-read':524,911 'read':189,279,284,359,400,526,913 'read-on':188 'recommend':712 'reconcil':6 'reconcili':350 'ref':582 'ref-nam':581 'refer':544,558,928 'reference-nam':543,557 'references.md':929,930 'releas':98 'renew':472,476 'report':209,868 'request':517,687 'requir':191 'resourc':66,198,248,521,879,922 'return':752 'revenuecat':3,17,26,39,41,54,65,74,91,119,136,151,155,175,224,244,247,271,285,299,329,402,450,455,460,466,474,592,618,761,858,878,886 'run':831 'safeti':182 'scope':242 'server':121 'set':30 'six':733,736 'skill':46,882 'skill-asc-revenuecat-catalog-sync' 'skip':773,791,807,905 'sourc':281,927 'source-rorkai' 'stabl':229 'start':184,855 'step':353,355,357,398,440,510,589,625,659,914 'step-by-step':352 'store':8,50,159,163,225,254,612,821,846 'subscript':10,34,265,267,365,385,388,454,456,473,477,481,485,534,537,548,550,566,787 'subscription-period':565 'subscriptions/iaps':86 'suggest':478 'summari':351,755 'support':143 'sync':5,33,43 'system':220 'target':154,286 'text':782 'three':728,731 'togeth':871 'tool':408,859 'topic-agent-skills' 'topic-ai-skills' 'topic-app-store-connect' 'topic-apple' 'topic-asc' 'topic-automation' 'topic-cicd' 'topic-cli' 'topic-devops' 'topic-ios' 'topic-macos' 'topic-testflight' 'true':684 'two':723,726 'type':157,448,452,578,621 'uniqu':240 'unless':507 'updat':680 'use':23,28,44,69,170,236,258,405,596,631,666,849 'user':492,508 'v2':177 'var':118 'verif':917 'verifi':345,651 'vs':129 'wait':309 'want':71,81,100 'week':716,718 'workflow':201,356,923 'write':173,195 'write-en':172 'wrong':885,897 'year':739","prices":[{"id":"8471c678-c900-4319-b7a7-a90f5e1ec600","listingId":"b7f2ea66-2ba0-4bba-a1e0-ddfd9a82f7b9","amountUsd":"0","unit":"free","nativeCurrency":null,"nativeAmount":null,"chain":null,"payTo":null,"paymentMethod":"skill-free","isPrimary":true,"details":{"org":"rorkai","category":"app-store-connect-cli-skills","install_from":"skills.sh"},"createdAt":"2026-04-18T21:56:49.039Z"}],"sources":[{"listingId":"b7f2ea66-2ba0-4bba-a1e0-ddfd9a82f7b9","source":"github","sourceId":"rorkai/app-store-connect-cli-skills/asc-revenuecat-catalog-sync","sourceUrl":"https://github.com/rorkai/app-store-connect-cli-skills/tree/main/skills/asc-revenuecat-catalog-sync","isPrimary":false,"firstSeenAt":"2026-04-18T21:56:49.039Z","lastSeenAt":"2026-05-02T18:53:02.573Z"}],"details":{"listingId":"b7f2ea66-2ba0-4bba-a1e0-ddfd9a82f7b9","quickStartSnippet":null,"exampleRequest":null,"exampleResponse":null,"schema":null,"openapiUrl":null,"agentsTxtUrl":null,"citations":[],"useCases":[],"bestFor":[],"notFor":[],"kindDetails":{"org":"rorkai","slug":"asc-revenuecat-catalog-sync","github":{"repo":"rorkai/app-store-connect-cli-skills","stars":776,"topics":["agent-skills","ai-skills","app-store-connect","apple","asc","automation","cicd","cli","devops","ios","macos","testflight","xcode"],"license":"mit","html_url":"https://github.com/rorkai/app-store-connect-cli-skills","pushed_at":"2026-04-24T08:59:37Z","description":"Skills to automate app store deployed and everything related to it using the asc cli","skill_md_sha":"6e9984dddfe1c4b29d5eef44155b98d65359bd27","skill_md_path":"skills/asc-revenuecat-catalog-sync/SKILL.md","default_branch":"main","skill_tree_url":"https://github.com/rorkai/app-store-connect-cli-skills/tree/main/skills/asc-revenuecat-catalog-sync"},"layout":"multi","source":"github","category":"app-store-connect-cli-skills","frontmatter":{"name":"asc-revenuecat-catalog-sync","description":"Reconcile App Store Connect subscriptions and in-app purchases with RevenueCat products, entitlements, offerings, and packages using asc and RevenueCat MCP. Use when setting up or syncing subscription catalogs across ASC and RevenueCat."},"skills_sh_url":"https://skills.sh/rorkai/app-store-connect-cli-skills/asc-revenuecat-catalog-sync"},"updatedAt":"2026-05-02T18:53:02.573Z"}}