Marketplace settlement reconciliation for QuickBooks Online
Project description
Reconcilly
Marketplace settlement reconciliation for QuickBooks Online.
Reconcilly turns marketplace export files into balanced journal entries ready for QBO import, plus a reconciliation report and close memo. It runs entirely on your computer; nothing is uploaded to a third party.
What it does
| Channel | Inputs | Outputs |
|---|---|---|
| Amazon | Monthly Unified Transaction CSV (+ optional Monthly Summary PDF for reconciliation) | One JE CSV per settlement id, plus a close memo and (if PDF supplied) a reconciliation report |
| Shopify | Orders CSV, Payouts CSV, Taxes CSV | One monthly JE CSV plus a markdown reconciliation report with 9 validation gates |
| TikTok Shop | Income workbook XLSX | One monthly JE CSV plus a markdown reconciliation report with 11 validation gates |
Every JE balances debits = credits to the cent. Validation gates run automatically; FAIL gates block emission unless you explicitly override with a written reason that's recorded in the report.
What it isn't
- Not a QBO connector. Reconcilly produces a CSV; you import it.
- Not multi-tenant. One
config.yamlper deployment. - Not a bookkeeping replacement. It assumes you already know what account names and policies you want; it just builds the JE mechanically from your exports.
Quickstart
git clone <your-fork-or-zip>
cd reconcilly
pip install -e ".[dev]"
cp config.example.yaml config.yaml
# edit config.yaml: set entity codes, channels, cash account names
uvicorn app.main:app --reload
# browse to http://localhost:8000
The web UI lets you upload a settlement file and download a zip with the JE CSV plus the markdown report. There's also a CLI for the Shopify channel:
python -m app.reconciliation.shopify --period 2026-03 \
--csv-dir samples/2026-03/ --entity ACME
Configuration
All customer-specific values live in config.yaml (gitignored). Copy
config.example.yaml and edit:
entities:
- code: ACME
label: "ACME LLC"
channels: [amazon, shopify, tiktok]
cash_accounts:
amazon: "Cash — ACME Amazon"
shopify: "Cash — ACME Shopify"
tiktok: "Cash — ACME TikTok"
shop_slugs:
tiktok: ["YOURSHOPSLUG"]
tiktok:
default_entity: ACME
The full schema is documented in config.example.yaml.
Environment variable overrides (whitelist):
RECONCILLY_CONFIG_PATH— explicit config file pathRECONCILLY_USE_GCS— toggle GCS storage (Cloud Run)RECONCILLY_GCS_BUCKET— GCS bucket name
Development
pytest # all synthetic; no setup required
ruff check . # lint
To run integration tests against your own data, drop real export files
under a gitignored samples/ directory; the existing test infrastructure
gates real-file tests behind skipif(not PATH.exists()) so they auto-skip
when no samples are present.
Deployment
A Dockerfile and deploy/cloudbuild.yaml are included for Google Cloud
Run. The cloudbuild substitutes the service / repo / image names; edit
those for your project before deploying. Set RECONCILLY_USE_GCS=true
and RECONCILLY_GCS_BUCKET=<your-bucket> on the Cloud Run service so
uploads and outputs persist across instances.
License
Proprietary. See LICENSE.md for terms (Reconcilly Commercial License v1.0). Contact peter@horizonbrandsgroup.com for licensing or refunds.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file reconcilly-0.1.0.tar.gz.
File metadata
- Download URL: reconcilly-0.1.0.tar.gz
- Upload date:
- Size: 207.3 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.13
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
ab53974786acb0a06ed9f48b57fa865543e4ae92ec6b2b112478182135987c98
|
|
| MD5 |
86880dd3e4fe3bb9320a2644128b44e0
|
|
| BLAKE2b-256 |
9c2943d615029d6a474a6fcf2e12d6a8fb2668e4d599bff5a808167f138d5de7
|
File details
Details for the file reconcilly-0.1.0-py3-none-any.whl.
File metadata
- Download URL: reconcilly-0.1.0-py3-none-any.whl
- Upload date:
- Size: 159.8 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.13
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
2115395656ee648d51368dc3c722d0f45feeab34198b8b03477078a4f0415232
|
|
| MD5 |
e367c15d4fca8b205b27320a65bba2d7
|
|
| BLAKE2b-256 |
2c8fb7d89e1f89da400e3278136097f1e7675d79e7eefee9b28889bd0c951d34
|