A free, open-source calculator that splits money fairly between people who pooled their Bitcoin — it shares the network fee, ignores the tiny leftover in the exchange, gives every person their exact amount of Toman (or any currency) without losing a single unit, and shows how every number was obtained, step by step.
⚡ Quick Start (EXE) · Features · Run from Source · How to Use · The Math · Troubleshooting · Support
- What Is This?
- Features
- Quick Start — Windows EXE
- Run from Source
- How to Use
- How the Calculation Works
- Worked Example
- Guide to the Pages
- Operation Log
- Settings
- Platform Notes
- Build the EXE Yourself
- Troubleshooting
- FAQ
- Privacy and Security Notes
- Contact & Support
- License
SatSplit is a desktop application for groups that share Bitcoin. A typical story: three friends each hold some BTC, they send everything to one exchange account, pay one network fee, sell the Bitcoin for Toman — and now they need to know exactly how much money belongs to each person.
Doing this by hand (or asking a chatbot every time) is error-prone:
- the network fee must be shared fairly,
- a few satoshi usually stay behind in the exchange and must not distort the result,
- the shares are not equal because the holdings are not equal,
- and when every amount is rounded separately, the parts often add up to one Toman more or less than the money you really received.
SatSplit does all of it with exact arithmetic, shows every step the way a careful accountant would, and checks itself with seven automatic tests. You only change the numbers — or paste your usual text and let the app find them.
- 🧮 Live calculator — change a number and the whole split updates instantly; any number of people (add / remove with one click)
- 🔎 Every step explained — fee share, net BTC, leftover, exchange rate, exact share, rounding; formulas and tables, in English or Persian
- ➗ Exact math — fractions, never floating point; the final amounts always add up to the money received to the last unit (largest-remainder rounding)
- 💸 Two fee methods — shared equally, or in proportion to the holdings; the report even compares both for you
- 🪙 Leftover ("dust") handling — BTC that stayed in the exchange is ignored and taken proportionally (or equally)
- 📋 Paste your own text — paste the paragraph you usually give to an AI; people, fee, money and converted amount are detected automatically (Persian and English, Persian digits too)
- ✅ Seven built-in checks — including an independent 60-digit recalculation — plus warnings for unusual input
- 🔍 Verify an answer — paste numbers someone else (or an AI) gave you and see who is off and by how much
- 🧰 Tools — BTC ⇄ satoshi ⇄ money converter, equal split without losing a unit
- 🗣 Persian words — amounts written out in Persian words (for contracts and receipts)
- 💱 Any currency — Toman, Rial, USD, USDT, EUR or your own name; rounding unit 1 / 10 / 100 / 1,000 / 10,000; enter the total money or the exchange rate
- 📨 Copy & export — chat-ready message, tab-separated table for Excel, full report as HTML, PDF, Markdown, text, CSV or JSON
- 🗂 History — save calculations, load them back, export / import them
- 📝 Operation Log — a timeline of everything the app did, optionally saved to a file
- 🌍 English + Persian (RTL), light / dark theme, accent colors, optional Persian digits (۱۲۳)
- 🔒 Private — no telemetry, no account, works fully offline
- 📦 One file — the whole program is a single Python file;
--buildmakes a standalone executable
No Python needed.
- Go to the Releases page of this repository.
- Download
SatSplit.exe. - Double-click it.
- Type the holdings, the fee and the money you received — the result appears at once.
The app is fully portable — copy it to any folder or USB drive and run it from there.
Windows SmartScreen / antivirus warning? The program is new and not code-signed. Click More info → Run anyway. All of the source code is in this repository so you can read it or build the EXE yourself.
- Python 3.10 or newer — https://www.python.org/downloads/
- Windows: tick ✅ "Add Python to PATH" during installation
- Dependency:
PyQt6(everything else is part of Python)
Download SatSplit_V1.py from this repository, or clone:
git clone https://github.com/Sparky2273/SatSplit.git
cd SatSplitpip install -r requirements.txtpython SatSplit_V1.pyCommand-line flags:
| Flag | What it does |
|---|---|
--build |
Build a standalone executable with PyInstaller |
--selftest |
Run the built-in calculation tests (including 2,000 random cases) and exit |
--version |
Print the version and exit |
- On the 🧮 Calculator page, type the BTC of every person in the People table (double-click a cell or just start typing). Use ➕ Add person / ➖ Remove to change the number of people.
- In Transaction fill in:
- Network fee (BTC) — the fee that was paid once for the whole transfer
- Converted amount (BTC) — how much BTC the exchange really sold (or tick Everything was converted)
- Money received — the total money you got, or switch Money input to rate and type the price of 1 BTC
- Currency, Rounding unit, Fee is shared, Leftover is taken — see below
- The Result area updates while you type (turn this off in Settings if you prefer the ⚡ Calculate button).
Numbers can be typed in any style: 117441451, 117,441,451, ۱۱۷٬۴۴۱٬۴۵۱, 0.00360772, 0,0036.
Press 📋 Paste text… and paste something like:
نفر اول: 0.00360772
نفر دوم: 0.0012926
نفر سوم: 0.00110701
در زمان انتقال به میزان 0.00004000 کارمزد شبکه بیت کوین می شود.
معادل تومانی آن می شود: 117,441,451
مقداری که تبدیل شده 0.005967 است
SatSplit finds the people, the fee, the money received and the converted amount, and fills in the form. Lines that only contain totals are ignored. Check the filled-in values — the app tells you what it found.
| Option | Meaning |
|---|---|
| Fee shared equally (default) | Everyone pays the same part of the network fee. Simple — but a small holder loses a bigger percentage. The report shows exactly how much. |
| Fee in proportion to holdings | A bigger holder pays a bigger part. |
| Leftover in proportion to net holdings (default) | The few satoshi that stayed in the exchange are ignored and taken from everyone in proportion to what they have. |
| Leftover equally | The leftover is taken equally from everyone. |
- The four tiles show the net BTC after the fee, the money received, the effective rate per BTC and the leftover.
- The table shows, for every person: holding, fee share, net BTC, percentage share and the final amount (orange).
- Under the table, ✔ / ✘ lines show the self-checks and ⚠ lines show warnings.
- Press 📄 Step-by-step report to see how every number was obtained.
🧰 Tools → Verify an answer. Paste the amounts somebody else calculated (one per line, in the same order as the people) and press Check. SatSplit shows the correct number, the given number and the difference for every person.
- 📨 Copy message — a short summary that is easy to paste into a chat.
- 📊 Copy table — tab-separated; paste straight into Excel / Google Sheets.
- 💾 Save to history (Ctrl+S) — keep the calculation; load it later from 🗂 History.
- Report page → Save as… — HTML, PDF, Markdown, text, CSV or JSON.
Let there be n people with holdings b₁ … bₙ, one network fee F, a converted amount C and money received T.
- Total holdings — B = b₁ + … + bₙ.
- Fee share — equal: fᵢ = F ÷ n; proportional: fᵢ = F × bᵢ ÷ B.
- Net BTC — nᵢ = bᵢ − fᵢ. The total net is B − F.
- Leftover — D = (B − F) − C (what stayed in the exchange). It is ignored and taken from everyone: dᵢ = D × nᵢ ÷ (B − F) (or D ÷ n). The sold share is cᵢ = nᵢ − dᵢ, and c₁ + … + cₙ = C.
- Exchange rate — T ÷ C money per BTC (or, if you typed the rate r, T = r × C).
- Exact share — aᵢ = T × cᵢ ÷ C.
- Rounding without loss — round every aᵢ down to the rounding unit, then give the units that are missing, one each, to the people with the biggest rounded-off fractions (largest-remainder method). The final amounts add up to T exactly and nobody is more than one unit away from their exact share.
All of this is done with Python Fraction objects — no rounding error can creep in. The report also shows a verification section (fee shares add up, net amounts add up, sold shares add up, percentages add up to exactly 100 %, final amounts add up to the money received, nobody is further than one unit from the exact value, and an independent 60-digit recalculation agrees).
Three people, fee 0.00004000 BTC, 0.005967 BTC converted (0.00000033 BTC stayed in the exchange), 117,441,451 Toman received:
| Person | Holding (BTC) | Fee share (BTC) | Net (BTC) | Share | Exact amount | Final |
|---|---|---|---|---|---|---|
| Person 1 | 0.00360772 | 0.000013333333 | 0.003594386667 | 60.2344 % | 70,740,177.8665 | 70,740,178 |
| Person 2 | 0.00129260 | 0.000013333333 | 0.001279266667 | 21.4378 % | 25,176,910.5361 | 25,176,910 |
| Person 3 | 0.00110701 | 0.000013333333 | 0.001093676667 | 18.3277 % | 21,524,362.5974 | 21,524,363 |
| Total | 0.00600733 | 0.00004000 | 0.00596733 | 100 % | 117,441,451.0000 | 117,441,451 |
Notice: rounding every exact amount to the nearest Toman separately gives 70,740,178 + 25,176,911 + 21,524,363 = 117,441,452 — one Toman too much. With the largest-remainder method the person whose fraction was smallest (.5361) keeps the lower value, and the total is exactly 117,441,451.
| Page | What it does |
|---|---|
| 🧮 Calculator | Inputs and the live result, checks and warnings |
| 📄 Report | The full step-by-step explanation; copy as text / Markdown / chat message or save as HTML, PDF, MD, TXT, CSV, JSON |
| 🗂 History | Saved calculations — load (double-click), delete, export, import |
| 🧰 Tools | BTC ⇄ satoshi ⇄ money converter · verify an answer · equal split |
| 📝 Operation Log | Timeline of everything the app did |
| ⚙️ Settings | Language, theme, accent color, animations, Persian digits, live calculation, data export / import / reset |
| ℹ️ About | Guide, FAQ, support, version info, check for updates, copy diagnostics |
Shortcuts: Ctrl+1 … Ctrl+7 switch pages, Ctrl+S saves to history, Ctrl+Enter calculates.
The 📝 Operation Log page records what the app does — calculations, imports, saves, setting changes, errors — each with a timestamp and a level (Info, Success, Warning, Error).
- Filter by level, Copy or Save as… the log, Clear it.
- Turn on Save operation log to a file in Settings to also write every entry to
satsplit.lognext to the program (it is rotated at about 1 MB). - When you report a bug, please include the log lines around the problem.
| Setting | What it does |
|---|---|
| Language | English / فارسی (instant, with right-to-left layout) |
| Theme | Dark / Light |
| Accent color | Six colors |
| Animations | Smooth transitions (turn off on slow computers) |
| Persian digits | Show numbers as ۱۲۳ |
| Live calculation | Recalculate while typing |
| Confirm before clearing | Ask before New clears the inputs |
| Save operation log to a file | Writes satsplit.log |
| Export / Import settings | Back up preferences, current inputs and history as JSON |
| Reset everything | Back to factory defaults |
Settings are stored in the operating system's settings store for your user (registry on Windows, ~/.config on Linux, ~/Library/Preferences on macOS).
| Windows | Linux | macOS | |
|---|---|---|---|
| Runs from source | ✅ | ✅ | ✅ |
| Standalone binary | ✅ SatSplit.exe |
build with --build |
build with --build (.app) |
| Admin rights needed | ❌ never | ❌ never | ❌ never |
| Persian font | Segoe UI / Tahoma | Vazirmatn, Noto Sans Arabic or DejaVu Sans | system font |
SatSplit never needs administrator rights and never touches your network settings.
pip install -r requirements.txt pyinstaller
python SatSplit_V1.py --buildThis runs PyInstaller with the right options (single file, no console window, the repository icon.ico, version information). The result is dist/SatSplit.exe on Windows, dist/SatSplit on Linux and dist/SatSplit.app on macOS. The program logo is also drawn inside the program itself, so the window and the taskbar always show it.
"No module named PyQt6"
Run pip install -r requirements.txt (use the same Python you run the script with).
"The converted amount is larger than what is left after the fee" The Converted amount cannot be bigger than total holdings − fee. Check the fee and the amount, or tick Everything was converted.
"The fee share is not smaller than their holding" With an equal fee, a person with a very small holding cannot pay an equal part of the fee. Choose Fee in proportion to holdings or check the numbers.
The numbers differ by one Toman from another calculator Other tools round every person separately. SatSplit makes the parts add up exactly; see the worked example.
The Persian text looks wrong on Linux
Install a Persian-capable font, e.g. sudo apt install fonts-vazirmatn or fonts-noto-core.
The app says it is already running Only one copy runs at a time. Close the other window (or check the task manager).
Windows SmartScreen / antivirus blocks the EXE The EXE is not code-signed. More info → Run anyway, or build it yourself.
Is it only for Bitcoin and Toman? The math is the same for any coin and any currency. Pick Rial, USD, USDT, EUR or type your own currency name in the Currency box.
Why not simply divide by the holdings? Because of the fee (shared per person, not per BTC), the leftover and the rounding. SatSplit handles all three and proves the result.
Which fee method should I choose? Equal is the usual agreement: every person pays the same part. Proportional is fairer to small holders. The report's last section compares both with real numbers.
What if some BTC stayed in the exchange? Enter the amount that was really sold in Converted amount. The rest is the leftover and is taken into account automatically.
Can I use a rate instead of the money I received? Yes — set Money input to I know the rate and type the price of 1 BTC.
Does it need internet? No. The only network request is the optional Check for updates button in About.
Where is my data stored?
Only on your computer (settings store + optional satsplit.log). Use Settings → Data to export or reset it.
- No telemetry, analytics, accounts or ads.
- The only network request is About → Check for updates, which asks the GitHub API for the latest release number.
- Nothing is read from or sent to any exchange or wallet — you type the numbers yourself.
- Saved history and settings stay on your computer; export files are plain JSON you can read.
- The calculation never uses floating-point numbers, so results are reproducible bit for bit.
Questions, bugs or ideas? Send me a direct message on Telegram.
- Telegram: @Sparky2273
- Email: mhashemi6699@gmail.com
- Bug Reports & Feature Requests: Open a GitHub Issue
This project is licensed under the MIT License — see the LICENSE file for details.
Made with ❤️ by SPARKS
Every satoshi, split fairly.