How CSV import works
The Import CSV button auto-detects whether you're dropping a Shopify products export or an orders export and routes it to the right place.
For products: reads
Handle, Title, Option1 Value, Variant SKU, Variant Inventory Qty, Cost per item, Variant Price. Existing SKUs update quantity/price; manual fields (reorder, supplier, lead days) are preserved.
For orders: reads Name, Created at, Lineitem sku, Lineitem quantity, Lineitem price. Each line item becomes a sale. Duplicate order+SKU combos are skipped automatically.
Stock value, top 12 SKUs (at cost)
Inventory
No inventory yet
Click Import CSV and drop a Shopify products export, or Add product to enter one by hand.
Recently deleted (0)
| SKU | Product | Deleted | Actions |
|---|
No recently deleted rows.
Sales performance
Weekly trend
Top sellers
Ranked by units sold
| # | Product | Units | Revenue |
|---|
Velocity
Units per week, weeks of cover
| # | Product | Units/wk | On hand | Cover | Pace |
|---|
Margin leaders
Most profit earned in this period
| # | Product | Units | Margin/unit | Total margin | Margin % |
|---|
Customer economics
ARPU, CAC, LTV and repeat rate
Top customers
Ranked by revenue
| # | Customer | Orders | Revenue | AOV |
|---|
Geography
Where the orders ship
| Country / City | Customers | Orders | Revenue |
|---|
No sales yet
Drop a Shopify orders CSV onto the Import CSV button, or load demo data to see the analytics in action.
How transactions work
Every transaction is a double-entry journal. Money flows from one account (credited) into another (debited). Buying inventory: Debit Inventory, Credit Bank. Paying for marketing: Debit Marketing, Credit Bank. A refund reverses the direction. When you imported your old Monzo CSV the categories were mapped automatically. New CSV imports keep working the same way. To add accounts, run an UPDATE/INSERT in Supabase against
public.accounts; everything in the dropdowns refreshes in real time.
Spend & reconciliation
Inventory reconciliation
Transactions
| Date | Payee | Debit | Credit | Amount | Source | Allocated |
|---|
No transactions yet
Click Import CSV and drop a Monzo export, or click Add transaction to add one by hand.
Financial statements
Fiscal year start (click to edit)
Used for YTD calculations. All balances are derived from the ledger; no manual opening balances needed.
How marketing CSV import works
Export campaign performance from Meta Ads Manager (or Google Ads) as a CSV, then click Import CSV. Sixforty auto-detects Meta exports by their column headers (
Campaign name, Amount spent, Reporting starts, Reporting ends, Impressions, Reach, Clicks, CTR, CPC, CPM, Frequency, Results, Purchases conversion value). One CSV row becomes one campaign-period record. Re-imports for the same campaign and date range update in place.
Blended ROAS below is computed against actual Shopify revenue in the same period, so you can compare Meta's reported attribution to what hit the till.
Marketing performance
Spend over time
Campaigns
| Campaign | Period | Spend | Impressions | Reach | Clicks | CTR | CPC | CPM | Conv. | Conv. value | Meta ROAS |
|---|
No marketing data yet
Export a CSV from Meta Ads Manager and click Import CSV. The columns are auto-detected, so any standard campaign export will work.
How reconciliation works
Each panel below checks a specific consistency rule in your books at a chosen as-of date. Green means the numbers match, amber means there's a gap worth investigating.
Bank balances are populated automatically from any native Monzo CSV you import (the Balance column); you can also enter a point by hand.
Shopify snapshots come from periodic pulls via the Shopify MCP (or manual entry). Once you've set up the scheduled task, this whole tab runs hands-off.
Ledger sanity check
Assets must equal Liabilities + EquityBank reconciliation
Ledger Bank balance at end of month vs Monzo statement balanceAdd or correct a Monzo balance point
Sales reconciliation
HQ sales for the month vs Shopify-reported revenue for the same monthAdd or correct a Shopify snapshot
Inventory reconciliation
Ledger inventory spend vs Shopify stock on hand + sold at costOwner loan position
Outstanding balance owed to you by the businessMarketing reconciliation
Meta-reported ad spend vs ledger marketing transactionsRecent activity
| When | Who | Action | Target | Changes |
|---|
No activity yet
Every change you make to inventory or sales will appear here.
Manual snapshot
Saves the current state of inventory and sales to a separate table you can roll back to. Useful before a big stock count, a major price change, or an experimental bulk edit. Supabase also takes daily automatic Postgres backups, so this is belt-and-braces.