MCPcopy Index your code
hub / github.com/andyshephard/PricingKit

github.com/andyshephard/PricingKit @main

Chat with this repo
repository ↗ · DeepWiki ↗ · + Follow
747 symbols 1,757 edges 154 files 7 documented · 1%
What it actually does AI analysis from the code graph — generated when you open this
loading…
README

PricingKit Banner

PricingKit

Free, open-source regional pricing tool for the App Store and Google Play. Set PPP-adjusted prices across 175+ territories in one click — your credentials never leave your browser.

Features

  • Multi-platform support - Manage pricing for both Google Play and Apple App Store from one interface
  • Regional pricing - View and edit in-app product pricing by region/territory
  • Subscription management - Manage subscription base plan pricing
  • Bulk updates - Update prices across multiple products/regions at once
  • Currency conversion - Automatic exchange rate lookups
  • Multiple pricing strategies - PPP (World Bank), Big Mac Index, Netflix Index, or custom multipliers for regional pricing
  • Public Index Checker - Compare regional prices across strategies at /index-checker (no auth required)
  • Search & filter - Find products by SKU/product ID or name

Getting Started

Prerequisites

For Google Play: - A Google Cloud project with a service account configured - Service account JSON credentials with Google Play Developer API access

For Apple App Store: - An App Store Connect API key (.p8 file) - Your Issuer ID and Key ID from App Store Connect

See the in-app setup guide at /setup-guide for detailed instructions for both platforms.

Installation

npm install

Development

npm run dev

Open http://localhost:3000 to get started.

Production Build

npm run build
npm start

Tests

npm test

Tech Stack

  • Framework: Next.js 16 (App Router) with TypeScript
  • Styling: Tailwind CSS 4 + shadcn/ui
  • State: Zustand + TanStack Query
  • Forms: React Hook Form + Zod
  • Google Play API: googleapis
  • Apple App Store Connect API: Custom JWT client

Project Structure

src/
├── app/
│   ├── api/              # API routes (Google & Apple endpoints)
│   ├── dashboard/        # Dashboard pages
│   ├── index-checker/    # Public price index comparison tool
│   └── setup-guide/      # Setup instructions
├── components/
│   ├── ui/               # shadcn/ui components
│   ├── layout/           # Layout components
│   ├── products/         # Product components
│   └── subscriptions/    # Subscription components
├── lib/
│   ├── google-play/      # Google Play API integration
│   ├── apple-connect/    # Apple App Store Connect API integration
│   ├── exchange-rates/   # Currency conversion
│   └── conversion-indexes/ # PPP, Big Mac, Netflix indexes + exchange rate fallbacks
├── hooks/                # React Query hooks
└── store/                # Zustand stores

Environment Variables

Create a .env.local file (optional):

# Custom encryption key for credential storage (recommended for production)
ENCRYPTION_KEY=your-secure-random-string

# Open Exchange Rates API key (for currency conversion)
OPEN_EXCHANGE_RATES_APP_ID=your-api-key

Security

  • Credentials are encrypted and stored in HTTP-only cookies
  • Credentials are never persisted on the server
  • Sessions expire after 24 hours

License

This project is licensed under the GNU General Public License v3.0 - see the LICENSE file for details.

This means you are free to use, modify, and distribute this software, but any derivative works must also be open-sourced under GPL-3.0.

Support

PricingKit is free and always will be. If you find it useful, consider buying me a coffee!

Buy Me A Coffee

Extension points exported contracts — how you extend this code

RawAppleProduct (Interface)
(no doc)
src/types/api.ts
ErrorBoundaryProps (Interface)
(no doc)
src/components/error-boundary.tsx
GoogleAuthResult (Interface)
(no doc)
src/middleware/auth.ts
TierData (Interface)
(no doc)
src/lib/apple-connect/price-tier-data.ts
GoogleAuthData (Interface)
(no doc)
src/store/auth-store.ts
ProbeListResp (Interface)
(no doc)
src/app/api/auth/route.ts
SetActiveAppResponse (Interface)
(no doc)
src/hooks/use-set-active-app.ts
RawAppleSubscription (Interface)
(no doc)
src/types/api.ts

Core symbols most depended-on inside this repo

error
called by 132
src/lib/utils/ndjson-stream.ts
cn
called by 72
src/lib/utils.ts
calculateRegionalPrice
called by 24
src/lib/google-play/currency.ts
moneyToNumber
called by 22
src/lib/google-play/types.ts
formatMoney
called by 21
src/lib/google-play/types.ts
parseMoney
called by 18
src/lib/google-play/types.ts
getAppleAuthFromCookies
called by 12
src/app/api/apple/auth/route.ts
getTerritoryByAlpha2
called by 10
src/lib/apple-connect/territories.ts

Shape

Function 543
Interface 167
Class 22
Method 15

Languages

TypeScript100%

Modules by API surface

src/lib/google-play/types.ts32 symbols
src/types/api.ts25 symbols
src/lib/errors.ts25 symbols
src/lib/apple-connect/types.ts24 symbols
src/components/subscriptions/apple-subscription-pricing-editor.tsx22 symbols
src/components/subscriptions/subscriptions-table.tsx19 symbols
src/lib/apple-connect/products.ts18 symbols
src/components/subscriptions/apple-subscription-bulk-pricing-modal.tsx18 symbols
src/lib/google-play/client.ts17 symbols
src/lib/apple-connect/client.ts16 symbols
src/lib/exchange-rates/client.ts15 symbols
src/components/ui/dropdown-menu.tsx15 symbols

For agents

$ claude mcp add PricingKit \
  -- python -m otcore.mcp_server <graph>

⬇ download graph artifact