Skip to content

Universal indie sales tracker for LemonSqueezy, Gumroad, and Stripe. iOS + macOS. 100% on-device privacy.

License

Notifications You must be signed in to change notification settings

sane-apps/SaneSales

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

17 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

SaneSales

Bring Sanity to Your Sales Tracking

LemonSqueezy + Gumroad + Stripe — finally unified

GitHub stars License: AGPL v3 macOS iOS Price Privacy: 100% On-Device Built with Claude

Star this repo if you find it useful! · Buy — $6.99 · Keeps development alive


The Problem

You sell on multiple platforms. Every morning you check three dashboards, copy numbers into a spreadsheet, and try to answer: "How are we actually doing?"

  • LemonSqueezy has your licenses
  • Gumroad has your digital products
  • Stripe has your subscriptions
  • Your spreadsheet is already out of date

The Solution

SaneSales pulls your sales data from all three platforms into one beautiful, native app. Revenue, orders, products, charts — all on your device, all in real time.

Revenue Dashboard Today, this month, and all-time revenue at a glance with trend indicators
Interactive Charts Daily revenue bar charts with Swift Charts. Tap to drill into any day
Product Breakdown Donut chart showing revenue by product. Tap segments to explore
Refund-Aware Revenue Net totals that deduct refunds automatically — no more overstated numbers
Order Tracking Search by customer, product, or amount. Filter by provider, status, or date
CSV Export Export your full order history for accounting or email marketing
Home Screen Widgets Glance at today's revenue from your home screen or lock screen
macOS Menu Bar See today's revenue in the menu bar. Right-click for quick actions
100% On-Device API keys in Keychain. Data cached locally. No analytics. No servers

Supported Providers

Provider Revenue Orders Products Refunds Pagination
LemonSqueezy
Gumroad
Stripe

Why Not Just Use Baremetrics or ChartMogul?

They're cloud dashboards. That means:

  • Your revenue data lives on their servers — every sale, every customer, every refund, stored and processed by a third party
  • They only support Stripe — sell on LemonSqueezy or Gumroad? Tough luck
  • $29–$99/month forever — that's $350–$1,200/year to look at your own sales numbers
  • No native app — just a browser tab competing with your other 47 tabs
  • No offline access — no internet, no data

SaneSales is the opposite:

Feature SaneSales Baremetrics ChartMogul Spreadsheets
Multi-provider ❌ Stripe only ❌ Stripe only Manual
LemonSqueezy support Manual
Gumroad support Manual
Refund-aware revenue ✅ Net after refunds Manual
Native iOS + macOS Web only Web only
Home screen widgets
Menu bar revenue
Your data stays on YOUR device ❌ Their cloud ❌ Their cloud Local
No subscription $6.99 once $29+/mo $99+/mo Free
Open source AGPL v3 N/A

$6.99 once vs $350+/year. Your sales data on your device, not theirs. Get SaneSales →


Download

One-time purchase. No subscription. Works on iPhone, iPad, and Mac.

Download from sanesales.com — $6.99

Also coming to the iOS & Mac App Store (submitted, awaiting review).

I wanted to make it $5, but processing fees and taxes were... insane. — Mr. Sane

Or build from source — it's AGPL v3 licensed, always will be.

Requirements: iOS 17+ / macOS 14+ · Apple Silicon (arm64) only


How It Works

  1. Connect — Paste your API key from LemonSqueezy, Gumroad, or Stripe
  2. Sync — SaneSales fetches your orders, products, and revenue directly from the provider APIs
  3. Track — See everything in one dashboard with charts, search, and export

API keys are stored in the device Keychain with hardware encryption. Sales data is cached locally for offline access. Nothing is ever transmitted to SaneApps servers.


Privacy

SaneSales does not collect, transmit, or store any personal data.

  • No accounts, no sign-up, no email required
  • No analytics, no telemetry, no crash reports
  • API keys stored in device Keychain (hardware-encrypted)
  • Direct communication with provider APIs — no intermediary server
  • Sales data cached on-device only
  • Open source — verify yourself

Full policy: sanesales.com/privacy


Development

# Clone the repo
git clone https://github.com/sane-apps/SaneSales.git
cd SaneSales

# Generate the Xcode project
xcodegen generate

# Build macOS
xcodebuild -scheme SaneSales -destination 'platform=macOS,arch=arm64' build

# Build iOS
xcodebuild -scheme SaneSalesIOS -destination 'platform=iOS Simulator,name=iPhone 17 Pro' build

# Run tests (20 tests across 4 suites)
xcodebuild -scheme SaneSales test -destination 'platform=macOS,arch=arm64'

Requirements

  • macOS 14.0+ (Sonoma) / iOS 17.0+
  • Xcode 16+
  • Apple Silicon (arm64) only
  • XcodeGen (brew install xcodegen)

Architecture

Core/
  Models/          Order, Product, Store, SalesMetrics (Codable, Sendable)
  Services/        SalesProvider protocol, LemonSqueezy/Gumroad/Stripe actors
  SalesManager     @MainActor @Observable — central state coordinator

iOS/
  Views/           Shared SwiftUI views (iOS + macOS)
  Components/      SalesCard, GlassSection, badges, chart components

macOS/
  SaneSalesMacApp  macOS entry point, menu bar, activation policy
  MenuBarManager   Status item with revenue display + right-click menu

Widgets/           WidgetKit extensions (small, medium, rectangular)
Tests/             Swift Testing (API parsing, metrics, cache, providers)

Key Patterns

  • SalesProvider protocol for all platform adapters
  • Actors for network services, @Observable for state
  • UserDefaults cache for offline mode
  • Keychain for API keys (service: com.sanesales.app)
  • Swift 6 strict concurrency

See DEVELOPMENT.md for detailed setup, demo mode, and conventions.


Support


License

AGPL v3 — see LICENSE for details.


Made with love in the USA by Mr. Sane

Not fear, but power, love, sound mind — 2 Timothy 1:7

SaneBar · SaneClip · SaneHosts · SaneSales · All Apps

Releases

No releases published

Packages

No packages published

Contributors 2

  •  
  •