Better App Store Connect.
A macOS desktop app that replaces Apple's App Store Connect web dashboard. Edit metadata across all locales at once, manage TestFlight builds and testers, review analytics, respond to customer reviews, and submit nominations – all from a single desktop window. AI translates your descriptions, keywords, review replies, and even screenshots into every language with one click.
Everything runs locally. One SQLite database, no cloud, no accounts, no telemetry. Credentials are encrypted with AES-256-GCM and the master key lives in the macOS Keychain.
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
Release management – edit descriptions, keywords, what's new, promotional text, names, and subtitles for every locale. Pick builds, choose release method (manual, automatic, or scheduled), toggle phased rollout. Save everything in one click.
AI-powered localisation – translate any field or all fields to one locale or every locale simultaneously. Generate optimised keywords. Draft professional review replies. Translate foreign reviews. Generate appeal text for unfair ratings. Bring your own API key from Anthropic, OpenAI, Google, xAI, Mistral, or DeepSeek.
TestFlight – manage builds, beta groups, and testers in one interface. Add or remove builds from groups in bulk. Track installs, sessions, and crashes per build. Review tester feedback with device details and screenshots. Mark feedback as done.
Analytics – impressions, downloads, proceeds, first-time downloads, sessions, crashes, and conversion funnel. Compare periods, break down by territory, track version adoption. Acquisition sources, usage patterns, and crash reports across separate tabs.
Keyword optimisation – track keyword character budgets per locale and storefront. Detect duplicates between name, subtitle, and keyword fields within a locale and across locales. One-click fix suggestions help maximise coverage and ranking across every market.
Customer reviews – filter by rating, territory, or response status. Translate foreign-language reviews with one click. Draft replies with AI, automatically matching the reviewer's language. Edit and delete existing responses.
Screenshots – upload, reorder with drag-and-drop, preview in lightbox, and delete screenshots across all device categories (iPhone, iPad, Mac, Apple TV, Apple Watch, Apple Vision) and locales. Translate screenshots to any locale using Gemini 3 Pro Image – the AI translates marketing text while preserving fonts and layout. Copy base locale screenshots to other locales without translation. Locale picker shows which locales have screenshots at a glance.
Nominations – browse, edit, and submit App Store nominations. AI-powered fill generates nomination answers from your app metadata with one click.
Privacy and security – local-first architecture. All data stays on your Mac in a single SQLite file. Credentials encrypted with AES-256-GCM envelope encryption, master key stored in the macOS Keychain. No cloud, no accounts, no telemetry.
Itsyconnect is free to use with one app and one developer account. A one-time Pro upgrade removes all limits – unlimited apps and accounts.
| Free | Pro | |
|---|---|---|
| Apps | 1 | Unlimited |
| Developer accounts | 1 | Unlimited |
| All features | Yes | Yes |
| Price | Free | One-time purchase |
Direct distribution – licences are handled via LemonSqueezy (key-based activation).
Mac App Store – Pro is available as a StoreKit in-app purchase (non-consumable, one-time).
git clone https://github.com/nickustinov/itsyconnect-macos.git
cd itsyconnect-macos
npm install
npm run electron:devThe setup wizard will guide you through connecting your App Store Connect credentials.
npm run electron:dev # Launch Electron with hot reload
npm run electron:make:dmg # Build signed DMG (direct distribution)
npm run electron:make:mas # Build for Mac App Store (MAS=1)
npm run test # Run tests
npm run test:watch # Watch mode
npm run test:coverage # Coverage report
npm run db:generate # Generate Drizzle migration
npm run db:studio # Drizzle Studio
npm run lint # ESLintThe MAS=1 environment variable switches the app from LemonSqueezy to StoreKit for the Pro upgrade. It is set automatically by the electron:make:mas script.
To test MAS mode during development:
MAS=1 npm run electron:devThis shows the StoreKit UI (buy/restore buttons) on the licence page instead of the LemonSqueezy key input. The auto-updater is disabled in MAS mode.
| Flag | Purpose |
|---|---|
MAS=1 |
Switch to StoreKit IAP, disable auto-updater, use MAS entitlements. Set automatically by electron:make:mas. |
MAS_DEV=1 |
Sign with Apple Development cert + dev provisioning profile (for local testing). Without this, the build uses the 3rd Party Mac Developer Application cert + distribution profile (for App Store submission). |
Two provisioning profiles are needed in the project root (both gitignored):
| File | Type | When to use |
|---|---|---|
provisioning.dev.provisionprofile |
macOS App Development | Local testing (MAS_DEV=1) |
provisioning.dist.provisionprofile |
Mac App Distribution | App Store submission |
Create both in the Apple Developer portal under Provisioning Profiles, selecting the com.itsyconnect.app App ID and the matching certificate.
# Build with dev signing (runs locally)
MAS_DEV=1 npm run electron:make:mas
# Open the built app
open out/Itsyconnect-darwin-arm64/Itsyconnect.app# Build with distribution signing
npm run electron:make:mas
# Submit via Transporter or altool
xcrun altool --upload-app -f out/make/*.pkg -u you@example.comWhile running MAS=1 npm run electron:dev, you can simulate StoreKit activations via curl:
# Activate (simulates a successful purchase)
curl -X POST http://127.0.0.1:3000/api/license/storekit \
-H "Content-Type: application/json" \
-d '{"transactionId": "test-txn-123"}'
# Check licence status
curl http://127.0.0.1:3000/api/license
# Deactivate
curl -X DELETE http://127.0.0.1:3000/api/license/storekitReal purchases require a signed MAS build and an Apple sandbox tester:
- Register the product
com.itsyconnect.app.pro(non-consumable) in App Store Connect - Create a sandbox tester under Users and Access → Sandbox
- Build with
MAS_DEV=1 npm run electron:make:mas - Run the signed build, sign into the sandbox account when prompted, then purchase
Electron app
├── electron/main.ts → main process (Keychain, server, window)
├── electron/preload.ts → minimal context bridge (no FS access)
├── src/proxy.ts → request interception (replaces middleware.ts)
├── src/app/api/* → REST API routes (Next.js 16)
├── src/lib/asc/* → App Store Connect API client
├── src/lib/ai/* → AI prompt templates and streaming
├── src/db/* → Drizzle ORM + SQLite (WAL mode)
└── ~/Library/Application Support/Itsyconnect/
├── itsyconnect.db → SQLite database
└── master-key.enc → Keychain-encrypted master key
Stack: Electron 40 · Next.js 16 · React 19 · TypeScript · Tailwind v4 · shadcn/ui · Phosphor Icons · Geist font · SQLite via better-sqlite3 · Drizzle ORM · Recharts · dnd-kit · Zod · Vercel AI SDK · AES-256-GCM envelope encryption · macOS Keychain
The app auto-updates via update.electronjs.org, which reads from public GitHub Releases.
- Bump
APP_VERSIONandBUILD_NUMBERinsrc/lib/version.ts, and"version"inpackage.json - Commit and push
- Run the release script (builds, signs, notarizes, creates a draft GitHub release):
APPLE_ID=you@example.com APPLE_ID_PASSWORD=xxxx-xxxx-xxxx-xxxx APPLE_TEAM_ID=XXXXXXXXXX \ ./scripts/build-release.sh
- Review the draft release on GitHub, edit release notes, then click Publish
update.electronjs.orgpicks up the new release – existing users are prompted to restart and update
Users can also check manually via Itsyconnect > Check for updates… in the menu bar.
MAS builds use Apple's distribution signing and skip notarization (Apple reviews MAS apps separately). The auto-updater is disabled – updates go through the App Store.
npm run electron:make:masSubmit the resulting package via Transporter or xcrun altool.





