Shopify Profit Tracking: How to See Real Profit, Not Just Sales
Shopify shows sales, not profit. How to track real profit per day and per order: product cost, shipping, fees, ad spend and RTO, and what to automate.
On this page
- Why sales is the wrong number to watch
- The profit stack for a D2C order
- Step 1: put product costs into Shopify
- Step 2: bring in ad spend every day
- Step 3: add returns and RTO in the right month
- Step 4: decide the two views you need
- Step 5: track profit per campaign
- Spreadsheet, app or both?
- Common profit-tracking mistakes
- Frequently asked questions
To track real profit on Shopify you need five numbers per order: net revenue, product cost, shipping and payment costs, the ad spend that bought it, and whether it was delivered or came back. Shopify's own reports cover sales well and product cost partly, but they don't include your ad spend from Meta and Google, and they rarely know about RTO. Profit tracking means joining those sources every day, in one place.
Key takeaways
- Sales minus refunds is not profit. Profit is sales minus product cost, shipping, payment fees, ad spend and returns.
- Shopify can store product cost per variant, which gives you gross profit; ad spend and RTO have to come from elsewhere.
- Track profit daily for decisions and by order cohort for accuracy, because returns arrive weeks later.
- Ad spend is usually your largest cost after product cost, so it has to be in the same view as sales.
- Automate the joins; a weekly spreadsheet is fine to start, and almost always abandoned by month three.
Why sales is the wrong number to watch
Most Shopify dashboards lead with total sales. It is the easiest number to collect and the least useful for decisions. Two days with the same ₹1,50,000 of sales can be very different:
- Day A: full-price orders, mostly prepaid, ₹30,000 of ad spend.
- Day B: a 20% sale, mostly cash on delivery, ₹70,000 of ad spend.
Day B can easily lose money while looking identical in the sales report. The only way to see the difference is to take costs off at the order level.
The profit stack for a D2C order
| Line | Where the data lives | Notes |
|---|---|---|
| Gross sales | Shopify | Before discounts |
| Discounts | Shopify | Order and line-level |
| GST collected | Shopify (tax lines) | Not your revenue; take it out |
| Net revenue | Calculated | Gross minus discounts and GST |
| Product cost (COGS) | Shopify "cost per item", or your own sheet | Set it per variant |
| Packaging | Your rate card | Per order |
| Shipping | Courier invoices (for example Shiprocket) | Forward, plus return freight on RTO |
| Payment fees | Gateway settlement reports, COD charges | Usually 2–3% or a flat COD fee |
| Ad spend | Meta Ads, Google Ads | Daily, by campaign |
| Refunds, RTO, cancellations | Shopify + shipping partner | RTO often isn't in Shopify |
The result at the bottom is often called contribution profit: what is left after every cost that scales with orders. Rent, salaries and software come out after that, monthly.

Step 1: put product costs into Shopify
Shopify lets you enter a cost per item on each product variant, which its reports use for gross profit. If your costs change (new supplier batch, freight), update them, and note the date: historical orders keep the cost recorded at the time. For bundles, set the cost on the bundle variant itself, or your margin will be wrong.
Step 2: bring in ad spend every day
Profit without ad spend is gross profit, which is useful but not what you need to manage ads. Pull daily spend from Meta Ads and Google Ads, by campaign. Be careful with currency and tax: ad invoices in India carry 18% GST, which you may or may not be able to claim back. Pick one rule and apply it everywhere.
Step 3: add returns and RTO in the right month
Cash-on-delivery orders that are refused come back days or weeks later. Industry data puts RTO on COD orders at about a quarter of shipments (coverage of Shipway's ShipNotes report). If your shipping partner doesn't update Shopify when an order returns, Shopify keeps counting it as a sale.
Two rules keep profit honest:
- Use shipment outcomes, not a flat percentage. Pull delivered and RTO status from your shipping partner and match it to Shopify orders.
- Count the loss in the month the order was placed. Otherwise last month looks better and this month worse than either really was. The RTO cost calculator shows the rupee cost of each returned parcel.
Step 4: decide the two views you need
Daily profit, provisional. Today's orders, today's ad spend, expected costs. It answers "should I change anything today?" It will be slightly optimistic, because today's RTOs haven't happened yet. Some brands apply their recent RTO rate as an estimate until real outcomes arrive, and label it clearly.
Cohort profit, final. For each week or month of orders, the profit once shipment outcomes are in, usually 30 to 45 days later. It answers "did last month's ads actually make money?" and it is the number to set targets on.

Step 5: track profit per campaign
The total tells you whether the business is healthy. Profit per campaign tells you what to change. Tag every ad link with UTM parameters, join Shopify orders to campaigns, and compare each campaign's kept revenue and margin with its spend. Campaigns that look strong in Ads Manager but weak on kept orders are usually winning cash-on-delivery orders that return; the true ROAS guide explains why.
Spreadsheet, app or both?
A spreadsheet works for the first month and teaches you your numbers. It breaks when you want daily updates, per-campaign profit and RTO from your courier, because each refresh means three or four exports.
Tera Ads is built for exactly this join. It connects to Shopify, Meta Ads and Google Ads, adds RTO from Shiprocket, and shows profit after ad spend and returns on one screen, with every campaign from both ad platforms in one table. New orders appear about a second after checkout; Meta spend updates every 30 minutes and Google every hour. It is free for one business, and you can still export to a sheet when you want to dig in.
Whatever you use, set your break-even ROAS from the same margin numbers, so targets and tracking agree.
Common profit-tracking mistakes
- Leaving GST in revenue. It inflates sales by up to 18%.
- Forgetting packaging and payment fees. Small per order, large per month.
- Using ad platform revenue instead of Shopify revenue. Platforms count sales differently and double count across channels.
- Ignoring RTO. For COD-heavy brands it is often the difference between profit and loss.
- Judging a month too early. Wait for shipment outcomes before calling it.
Frequently asked questions
Does Shopify show profit?
Shopify can show gross profit if you enter a cost per item for each product. It doesn't include your Meta or Google ad spend, and it usually doesn't know about RTO, so it can't show profit after marketing on its own.
What is a good profit margin for a Shopify store?
It depends on category and stage. Many healthy D2C brands aim for 10% to 20% of net revenue as contribution profit after ads, but early-stage brands often run lower while they grow.
How do I include RTO in Shopify profit?
Match each order to its shipment outcome from your shipping partner, subtract the revenue of orders that came back, and add the return freight. Book it against the month the order was placed.
Should ad spend include GST?
If you can claim input tax credit on the GST charged by Meta and Google, track ad spend without GST. If you can't, include it, because it is a real cost.
How often should I check profit?
Daily for a quick read, weekly for decisions about campaigns, and monthly, once returns are in, for targets and reporting.