Skip to content
Profit and ROAS

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.

Updated 6 min readBy Tera Ads editorial teamFacts checked

On this page
  1. Why sales is the wrong number to watch
  2. The profit stack for a D2C order
  3. Step 1: put product costs into Shopify
  4. Step 2: bring in ad spend every day
  5. Step 3: add returns and RTO in the right month
  6. Step 4: decide the two views you need
  7. Step 5: track profit per campaign
  8. Spreadsheet, app or both?
  9. Common profit-tracking mistakes
  10. 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

The lines that turn Shopify sales into profit, and where each comes from.
LineWhere the data livesNotes
Gross salesShopifyBefore discounts
DiscountsShopifyOrder and line-level
GST collectedShopify (tax lines)Not your revenue; take it out
Net revenueCalculatedGross minus discounts and GST
Product cost (COGS)Shopify "cost per item", or your own sheetSet it per variant
PackagingYour rate cardPer order
ShippingCourier invoices (for example Shiprocket)Forward, plus return freight on RTO
Payment feesGateway settlement reports, COD chargesUsually 2–3% or a flat COD fee
Ad spendMeta Ads, Google AdsDaily, by campaign
Refunds, RTO, cancellationsShopify + shipping partnerRTO 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.

From gross sales to profit after ads for one illustrative day
From gross sales to profit after ads for one illustrative day

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:

  1. Use shipment outcomes, not a flat percentage. Pull delivered and RTO status from your shipping partner and match it to Shopify orders.
  2. 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.

Daily provisional profit compared with the final cohort profit once returns arrive
Daily provisional profit compared with the final cohort profit once returns arrive

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.

See what your ads really earn.

Connect your store and ad accounts. Free for one business, no card needed.

Create free account