E-Commerce Expense Tracking
Track OPEX, CAPEX, and recurring costs in MerchantFlow. Spread costs across their real period, amortise capital purchases, and export data for tax prep.
E-Commerce Expense Tracking
Expense tracking in MerchantFlow is the process of recording, categorizing, and analyzing all business costs beyond product COGS and ad spend, giving Shopify and WooCommerce merchants a complete view of profitability. Track operational costs, capital investments, and recurring subscriptions, and control exactly how each cost lands on your daily P&L.
What Are Business Expenses in E-Commerce?
Business expenses are the costs of running your e-commerce operation beyond product costs:
- Software subscriptions (Shopify, email marketing, analytics tools)
- Marketing spend (ads, influencers, content creation)
- Office and supplies
- Equipment purchases
- Website development
- Professional services (accounting, legal)
- Shipping and fulfillment costs
- Team salaries and contractors
Why Track Expenses?
- Complete profit picture - Revenue minus all costs = true profit
- Accurate daily P&L - spread costs land on the days they actually apply to
- Budget management - Stay within spending limits
- Tax preparation - Organized records for deductions
- Cash reconciliation - untracked expenses are the usual cause of a bank balance variance
How to Access Expense Tracking
Navigate to Profit > Expenses (/dashboard/expenses).
The page shows:
- Nine KPI cards: Total OpEx (manual expenses), Ad Spend, Fulfillment, Warranty Fulfilment, Payment Fees, COGS, Sales Tax, Recurring Costs, and Pending Receipts. All except Warranty Fulfilment and Pending Receipts are clickable and apply the matching filter to the table below
- An OPEX Breakdown panel, subtitled Where your costs go, with a category donut and ranked list
- The expense table, filterable by category, type (OPEX/CAPEX), source, and recurring status
- Header actions: export, Manage Manual Expenses, Import CSV, and Add Expense
Filters persist in your browser between visits, and the table pages at 50 rows.
Access: viewing requires the expenses:view permission and adding or importing requires expenses:manage. Owners, admins, and analysts have both. Agency viewers can view but not edit. The viewer role has neither, so viewers cannot open expense data at all. There is no plan gating - only your plan's history window (90 days on Starter, 12 months on Pro, unlimited on Plus) limits how far back you can look.
What Is OPEX vs CAPEX?
Operating Expenses (OPEX)
Operating expenses are the day-to-day costs of running your business:
Marketing & Advertising:
- Google Ads (auto-synced if connected)
- Meta Ads (auto-synced if connected)
- Influencer partnerships
- Content creation
- Email marketing tools
- SEO services
Software & Subscriptions:
- Shopify/WooCommerce subscription
- Email marketing (Klaviyo, Mailchimp)
- Analytics tools
- Customer service platforms
- Accounting software
- Project management tools
Operations:
- Office rent
- Utilities
- Shipping materials
- Fulfillment fees
- Payment processing fees
- Bank fees
People:
- Salaries
- Contractor fees
- Freelancer payments
- Employee benefits (if applicable)
Professional Services:
- Accounting and bookkeeping
- Legal fees
- Consulting
Capital Expenses (CAPEX)
Capital expenses are long-term investments that provide value over time:
Equipment:
- Computers and hardware
- Photography equipment
- Warehouse equipment
- Office furniture
Development:
- Website redesign
- Custom app development
- Brand identity development
- Major platform migrations
Infrastructure:
- Warehouse lease deposit
- Major software licenses (multi-year)
- Domain purchases
Marketing Assets:
- Professional product photography
- Video production
- Trademark registration
Key difference from OPEX:
- OPEX: Ongoing, recurring, immediate benefit
- CAPEX: One-time, long-term, lasting value
How to Add Expenses in MerchantFlow
Method 1: Manual Entry (Single Expense)
For individual expense records:
- Go to Profit > Expenses
- Click "Add Expense"
- Fill in the form. Required fields are marked with an asterisk:
- Description* - e.g., "Annual insurance premium"
- Category* - one of the 15 categories (see below)
- Amount* and Currency
- Date*
- Expense type* - OPEX ("Running cost - rent, software, salaries, insurance") or CAPEX ("Asset you own and write down over time - equipment, vehicles, fit-out")
- Amortisation period (months)* - CAPEX only
- Vendor - optional, e.g., "Shopify"
- Notes - optional
- Repeats automatically - turn on for a recurring series, then set Frequency*, Start date*, and an optional End date
- How it hits your P&L - single-day or spread (see below)
- Click "Add Expense"
There are no project or channel fields on the expense form.
Method 2: Recurring Expenses
For monthly subscriptions or regular costs:
- Add expense as described above
- Toggle "Repeats automatically" to ON
- Set recurrence:
- Frequency - Weekly, Monthly, Quarterly, or Yearly
- Start date - When it began
- End date - Optional (leave empty for ongoing)
- Save
Effect: MerchantFlow creates each charge for you on schedule. You do not need to manually enter it every period.
Examples:
- Shopify subscription: $79/month, recurring monthly
- Annual software license: $1,200/year, recurring yearly
- Quarterly accounting fees: $500/quarter, recurring quarterly
Editing a recurring expense edits the whole series. MerchantFlow regenerates every occurrence from the template, so any per-occurrence edits you made are replaced. To stop a series, set an end date rather than deleting it.
How Costs Hit Your P&L
Every expense has a How it hits your P&L setting that controls whether the cost lands as a single-day spike or is spread evenly:
| Option | Effect |
|---|---|
| All on the expense date | The full amount posts on one day |
| Spread across the month | Divided evenly across that calendar month |
| Spread across 3 months | Divided evenly across a 3-month window |
| Spread across 6 months | Divided evenly across a 6-month window |
| Spread across 12 months | Divided evenly across a 12-month window |
| Spread across a custom period | Any number of months, up to 60 |
The daily rate is the amount divided by the inclusive number of days in the whole window, which starts at the beginning of the expense's month. A live preview shows the resulting per-day figure and date range before you save.
Two rules override the setting:
- Monthly recurring expenses are always spread across their month. The control has no effect on them.
- Weekly recurring expenses are never spread - they already recur roughly four times a month, so they post on each charge date.
CAPEX never uses spreading. It is written down through amortisation instead (see below).
Method 3: Auto-Synced Advertising
Google Ads and Meta Ads sync automatically:
- Connect Google Ads or Meta Ads integration
- Ad spend imports automatically during syncs
- Appears in Expenses under "Advertising"
- Already attributed to campaigns/channels
Manual override:
If automatic sync is not working:
- Add expense manually
- Category: "Advertising"
- Add campaign name in description
- Attribute to channel
Auto-Synced 3PL Warehousing
If Fulfilment Plus is connected, its storage and inbound receiving charges sync automatically as 3PL Warehousing expenses - one per charge, marked as synced and read-only. They are kept out of per-order costs on purpose, so they show as their own line in your P&L rather than being spread across orders.
Method 4: Bulk Import
For importing many expenses at once:
- Go to Profit > Expenses
- Click "Import CSV"
- Follow the four steps: Instructions, Upload, Map & Review, Done
The expected header is:
Date,Description,Amount,Category,Type| Column | Required | Example |
|---|---|---|
| Date | Yes | 2025-08-01 |
| Description | Yes | Shopify |
| Amount | Yes | 4.84 |
| Category | Optional - mapped to the closest match, unknown values become Other | subscriptions |
| Type | Optional - defaults to OPEX | OPEX |
Column headers are auto-detected, so common variants (Expense Date, Label, Cost, Expense Category) are recognised without manual mapping, and a wide range of date formats is accepted beyond ISO.
Two options on the review step, both on by default:
- Consolidate daily charges into one monthly entry per expense - useful for platforms that bill daily
- Skip rows already in your expenses - matches on date, description, and amount
Limits: up to 5,000 rows per import. Only OPEX rows are imported - CAPEX rows are rejected, and any Ad Spend category is remapped to Marketing (Non-Ad) because ad spend syncs automatically. The result reports how many rows were imported, skipped, and failed.
Use cases:
- Importing historical expenses from accounting software
- Uploading monthly credit card statements
- Bulk entry of contractor payments
Expense Categories
MerchantFlow ships a fixed list of 15 categories. There is no interface for creating your own - use Other plus a descriptive Description and Vendor for anything that does not fit.
| Category | Typical use |
|---|---|
| Ad Spend | Synced automatically from connected ad platforms |
| Marketing (Non-Ad) | Influencers, content, creative, SEO services |
| Software & Subscriptions | Shopify, Klaviyo, analytics, helpdesk tools |
| Shipping & Fulfillment | 3PL fees, postage, packaging |
| 3PL Warehousing | A 3PL's storage, inbound receiving and account management fees. Synced automatically from Fulfilment Plus, or added by hand |
| Payment Fees | Processor and gateway fees |
| Cost of Goods | Product cost outside the COGS system |
| Sales Tax | Tax remitted |
| Salaries & Wages | Payroll |
| Employees | Benefits and other people costs |
| Office & Supplies | Rent-adjacent day-to-day supplies |
| Equipment | Hardware and equipment purchases |
| Rent & Utilities | Premises costs |
| Funding Repayment | Repayments on external funding |
| Other | Anything else |
Ad Spend cannot be chosen when importing a CSV - those rows are remapped to Marketing (Non-Ad) so they do not double-count against the automatic ad platform sync.
CAPEX Amortisation
A CAPEX expense requires an Amortisation period (months). MerchantFlow divides the total by that number of months and recognises one slice per month, starting at the beginning of the expense's month. The form shows the resulting monthly figure as you type.
OPEX expenses must not carry an amortisation period - the form rejects it.
System-Managed Expenses
Your MerchantFlow subscription is tracked for you and appears as MerchantFlow Subscription (Auto) with an Auto badge. These rows cannot be edited or deleted; the tooltip explains they are tracked automatically from your billing.
Several other rows in the expense table are read-only views of data from elsewhere, not stored expenses: ad spend from connected platforms, 3PL fulfillment cost, payment fees, cost of goods, and sales tax. You can filter them out with the source filter to see only what you entered by hand.
How to View Expense Reports
Expenses Overview
Profit > Expenses shows the KPI cards for the selected period, including Total OpEx and Recurring Costs, plus the OPEX Breakdown panel (Where your costs go) with its category donut and ranked list.
Filtering the Table
Four filter groups combine:
- Category - any of the 15 categories
- Type - OPEX or CAPEX
- Source - manual, ad spend, fulfillment, payment fees, COGS, or tax
- Recurring - recurring or one-time
Your filter selection is remembered between visits. The KPI cards double as shortcuts - clicking one applies the matching filter.
Manage Manual Expenses
The Manage Manual Expenses button opens a list of every expense you added by hand, listed once - recurring parents appear as a single template rather than one row per generated occurrence. This is the fastest way to audit subscriptions and find costs worth cutting.
How to Edit and Delete Expenses
Update Expense Details
- Find expense in Expenses list
- Click pencil icon to edit
- Modify fields
- Click "Save"
Can change: every field on the form - description, category, amount, currency, date, vendor, notes, type, amortisation period, recurrence, and the spread setting.
Editing a recurring expense edits the whole series and regenerates its occurrences.
Delete Expenses
- Find expense in list
- Click trash icon
- Confirm deletion
Warning: Deletion is permanent and triggers a P&L recompute over every period the expense touched. System-managed rows with an Auto badge cannot be deleted.
Pause Recurring Expenses
To temporarily stop a recurring expense:
- Edit recurring expense
- Set "End date" to today
- Save
To resume later:
- Edit expense
- Remove end date or set future end date
- Save
How to Export Expense Data
- Navigate to Profit > Expenses
- Set the date range and any filters you want
- Click the export icon in the page header
The download is a CSV named for the range you selected -- expenses_2026-08-01_to_2026-08-31.csv, or expenses_2026-08-01.csv for a single day. It contains every expense in the range, not just the page you are looking at, with your filters and the search box applied. The columns are:
| Column | What it holds |
|---|---|
| Date | The date the expense is booked against |
| Description | The expense label, e.g. Klaviyo |
| Category | The category label as shown in the table |
| Type | OPEX or CAPEX |
| Amount | The full charge on the row |
| Amount in Range | The part of that charge that falls inside the selected range |
| Recurring | Yes for a generated occurrence of a recurring series |
| Source | Manual, or which sync produced the row |
Amount and Amount in Range differ for spread and amortised costs. A 900 annual licence spread across three months contributes only its overlapping slice to a one-month range. Amount in Range is the figure your P&L and the KPI cards use, so it is the column to reconcile against; Amount is what you were actually charged.
The file opens with a UTF-8 byte order mark so Excel renders accented vendor names correctly. A range holding more than 50,000 expenses is refused rather than silently shortened -- narrow the dates or add a filter.
There is no PDF or QuickBooks export format on this page. For a formatted, shareable document, build an Expense Breakdown report under Reports (Pro and Plus) and export it as CSV or PDF -- that report lists each expense individually under its category totals.
Best Practices for Expense Tracking
1. Record Expenses Promptly
Do not wait until month-end:
- Add expenses when they occur
- Set up recurring expenses once
- Import monthly credit card statements
Why: Real-time data helps you make informed decisions now, not after the fact.
2. Use Consistent Categories
Standardize expense categorization:
- Always categorize Shopify under "Software"
- All ad spend under "Marketing & Advertising"
- Keep categories consistent month-to-month
Why: Enables accurate trend analysis and comparisons.
3. Add Detailed Descriptions
Be specific in descriptions:
- "January 2026 Shopify subscription" (good)
- "Facebook Ads - Holiday Campaign" (good)
- "Software" (too vague)
- "Ads" (too vague)
Why: Easier to review during tax prep or when analyzing specific campaigns.
4. Choose the Right Spread
Match how the cost is consumed:
- An annual insurance premium spread across 12 months, not dumped on one day
- A one-off agency invoice for a quarter's work spread across 3 months
- A genuine one-day cost left on its date
Why: A single-day spike distorts that day's margin and every daily-granularity chart that reads it.
5. Review Recurring Expenses Quarterly
Audit subscriptions every 3 months:
- Which subscriptions are not used?
- Can you downgrade plans?
- Are there cheaper alternatives?
Tip: Regular audits help identify unused subscriptions and redundant costs.
6. Separate OPEX and CAPEX
Properly classify expenses:
- OPEX: Ongoing, recurring, operational
- CAPEX: One-time, long-term investments
Why: Different tax treatment. Important for accurate financial reporting.
7. Reconcile Against Your Bank Balance
Check the variance monthly:
- Record your real balance on Bank Balance
- Compare it against the tracked balance
- A widening gap is almost always an expense you have not entered
Why: Untracked costs make your profit look better than it is.
Troubleshooting Expense Tracking
Expense Not Showing in Reports
Check:
- Date range includes expense date
- Category filters not excluding expense
- Expense was saved (not just drafted)
Recurring Expense Not Auto-Creating
Verify:
- Repeats automatically is ON
- Start date is in the past
- End date has not passed (if set)
- Frequency is correct
Fix: Edit the recurring expense, verify settings, and save. Saving regenerates the whole series.
Ad Spend Not Syncing
If Google/Meta Ads not auto-importing:
- Check integration is connected (Settings > Integrations)
- Trigger a manual sync from the Manual Sync Runner at the bottom of Settings > Integrations
- Verify campaigns were active during period
- Check date range
An Expense Is Missing From a Day You Expected
Verify:
- Whether the expense is spread - a spread cost posts a fraction per day across its window, not the full amount on its date
- Whether it is a recurring parent template, which never posts on its own; only its generated occurrences do
- Whether it is CAPEX, which posts through monthly amortisation instead
Cannot Find or Edit an Expense
Try:
- Filter by category, type, or source
- Check a different date range
- Open Manage Manual Expenses to see every hand-entered expense in one list
If the row shows an Auto badge it is system-managed and cannot be edited or deleted.
Frequently Asked Questions
What is the difference between OPEX and CAPEX in e-commerce?
OPEX (operating expenses) are ongoing, recurring costs like software subscriptions, ad spend, and salaries. CAPEX (capital expenses) are one-time investments with lasting value like equipment purchases, website redesigns, and major software licenses. The distinction matters for tax treatment and financial reporting.
How does MerchantFlow automatically track ad spend?
When you connect your Google Ads or Meta Ads integrations, MerchantFlow automatically imports ad spend during each sync. It appears in the expense table under the Ad Spend category as a read-only row per platform per day - Google Ads, Meta Ads, TikTok Ads, Snapchat Ads, and so on. Because it syncs automatically, Ad Spend cannot be chosen when importing a CSV.
Can I import expenses from QuickBooks or other accounting software?
Yes, as CSV. Use Import CSV on the Expenses page. There is no direct QuickBooks connector and no QuickBooks-specific file format - export to CSV with Date, Description, Amount, and Category columns and MerchantFlow will auto-detect the headers. Only OPEX rows import; CAPEX must be entered by hand.
How often should I review recurring expenses?
Audit your recurring expenses quarterly. Use the recurring filter, or the Manage Manual Expenses list, to see active subscriptions and their total. Many businesses find unused or underutilized subscriptions that can be cancelled.
Where do expenses land in the P&L?
OPEX and amortised CAPEX are deducted below contribution margin:
Contribution margin - OPEX - Amortised expenses - Variable costs = EBITDA
EBITDA - Interest expense - Sales tax (only when treated as a cost) = Net profitEvery expense change triggers a P&L recompute over the whole range it affects, so a 12-month spread invalidates and rebuilds all twelve months, not just the day you edited.
Related Topics
- P&L Overview - Complete financial tracking
- COGS Management - Product cost tracking
- Bank Balance - Cash position monitoring
- Attribution System - How orders are assigned to channels
- Expense FAQ - Common questions
Need help? Contact support at [email protected] or visit our Expense FAQ.
Last updated: September 22, 2026
Last updated on
Product Bundle Tracking and Allocation
Create product bundles in MerchantFlow to track revenue allocation and profitability across gift sets, starter kits, and subscription boxes.
Tax Rules for P&L Estimation
Configure per-country and per-region tax rates in MerchantFlow to include estimated tax in your daily P&L calculations. Manage tax rules at Settings > Tax.