PrestaShop Profit Reporting: Margins, Costs and Cash

Calculate gross profit and contribution, audit PrestaShop cost data, track refunds and currencies, and plan cash flow with realistic assumptions.

mypresta.rocks · Updated 11/01/2026

Measure what your shop earns after product costs, fulfilment, fees and overhead. Keep profit and cash separate, and use a scoped, reconciled dataset before making pricing or growth decisions.

What we would do

We would reconcile a representative period with the accountant before choosing a new dashboard. Start with the reports, exports and cost records you already have, identify the decision you need to make, then fill the gaps. A maintained spreadsheet is a reasonable starting point when its inputs can be checked and someone owns the close.

The route depends on your existing shop: its installed modules, ERP and accounting integrations, historical cost coverage, shops, currencies, markets and the staff who will maintain the figures. Include the theme and checkout if customisations alter prices, discounts or order creation. Establish which system owns each input so an ERP cost update or a second connector does not silently replace the basis of your report.

For a module, import or integration change, use a staging copy with the relevant configuration and representative data, isolated from live payments, customer emails, carrier bookings and accounting exports. Rehearse an ordinary order, a discounted order and a partial refund through the proposed reporting workflow. Compare the output with the source documents, retain the previous configuration and agree a switch window, acceptance checks and reversal steps. Apply the reviewed change to live without replacing current orders or documents with the older staging database.

If you need help choosing a reporting module, the PrestaShop Module Selection & Fit Assessment tests the available routes against your requirement on a controlled shop copy.

Define gross profit, contribution and net profit

Sales, profit and cash answer different questions. Work from net sales on a consistent tax basis, then subtract the right costs for each measure. Show amounts and percentages separately.

MeasureCalculationUse
Gross profitNet sales minus cost of goods sold.Product mix, pricing and supplier negotiation.
ContributionGross profit minus the variable costs included in your definition, such as payment fees, fulfilment, packaging and attributable marketing.Discounts, shipping subsidies and order economics.
Operating profitContribution minus remaining operating expenses.Business capacity and operating performance.
Net profitProfit after all applicable expenses, including financing and taxes under your accounting policy.The business result for the period.
Margin percentageThe selected profit amount divided by its corresponding net sales, multiplied by 100.Comparison across periods on the same basis.

Keep collected VAT separate from revenue where appropriate, and distinguish recoverable from non-recoverable input tax. State whether revenue includes shipping and gift wrapping. Do not subtract tax-inclusive costs from tax-exclusive sales without adjustment.

Your own unpaid hours can be included in a separate economic-cost view. They are not automatically a booked payroll expense. Distinguish that view from the statutory accounts and avoid counting owner pay twice.

Profit is not cash retained. Stock purchases, supplier credit, unpaid invoices, processor reserves, tax payments, loans and capital expenditure change cash on a different timetable.

What PrestaShop stores and what you must add

Under Catalog > Products > Pricing, enter the product cost price. Check combination-specific costs too. These are confidential commercial inputs, but integrations with broad order-detail access can expose cost fields.

PrestaShop stores historical line data in order_detail. original_wholesale_price snapshots the product or combination wholesale value. purchase_supplier_price can use a supplier-specific purchase price. Decide which basis matches your cost accounting and check currency units before calculating.

Updating a current product's cost does not automatically repair missing historical cost snapshots. Treat a zero as unknown until you confirm it is a genuine zero-cost item. Use supplier and inventory records for a documented historical correction outside an issued-document rewrite.

For a bulk cost update, open Advanced Parameters > Import where your installed version offers it, choose products or combinations, and map the wholesale (cost) price field in the supported import format. Keep an export of the previous values, map stable product and combination identifiers, and check a sample on staging before importing the full file. Record the supplier source and effective date so a reviewer can explain a cost change rather than treating every new import as historical truth.

Native reporting depends on installed statistics modules. The official Best categories report has a Total Margin column with its own calculation. Catalog statistics summarises catalogue measures such as active products, images and average prices. These reports do not include every cost needed for contribution or net profit.

DataWhere to obtain itCheck
Sales and discountsOrders, invoice/line records and cart-rule records.Tax basis, document timing and discount allocation.
Product costsHistorical order-detail fields and inventory/supplier records.Cost basis, currency and missing values.
Refunds and returnsCredit slips, refund/return records and gateway transactions.Partial refunds, physical recovery and actual money returned.
Payment feesProvider statements and settlements.Fixed fees, cross-border cards, currency conversion and chargebacks.
Actual shippingCarrier/3PL invoices and adjustments.Fuel, remote-area, storage, returns and handling charges.

The customer shipping charge is revenue. It is not proof of the courier's cost. Some modules can store additional costs; reconcile the installed integration rather than assuming all external costs are present.

A scoped SQL audit of merchandise sales and cost

Use Advanced Parameters > Database > SQL Manager for a controlled SELECT report. Restrict access and run large analyses on a reporting copy. The following example audits one row per order for shop 1, currency 1 and June 2026. It assumes currency 1 is the shop's unchanged base currency and the wholesale snapshots use that same unit. Verify those assumptions before using the amounts.

SELECT o.id_order, o.reference, o.id_shop, o.id_currency,
       o.current_state, o.valid,
       SUM(od.total_price_tax_excl) AS line_sales_before_cart_adjustments,
       SUM(od.product_quantity * od.original_wholesale_price)
         AS recorded_original_cost,
       SUM(CASE WHEN od.original_wholesale_price IS NULL
                     OR od.original_wholesale_price <= 0
                THEN 1 ELSE 0 END) AS lines_needing_cost_review,
       SUM(od.total_price_tax_excl
           - od.product_quantity * od.original_wholesale_price)
         AS unadjusted_merchandise_difference
FROM ps_orders o
JOIN ps_order_detail od ON od.id_order = o.id_order
WHERE o.id_shop = 1 AND o.id_currency = 1
  AND o.date_add >= '2026-06-01 00:00:00'
  AND o.date_add < '2026-07-01 00:00:00'
  AND o.valid = 1
GROUP BY o.id_order, o.reference, o.id_shop, o.id_currency,
         o.current_state, o.valid
ORDER BY unadjusted_merchandise_difference ASC;

Replace ps_ with your prefix and the example scope with your actual reporting scope. This output is an audit starting point, not final gross or net profit. Line totals include stored line pricing, but the query does not allocate order-level cart discounts, subtract credit slips or determine recoverable cost on returns. It excludes shipping and wrapping revenue instead of calling the entire order total merchandise sales.

orders.valid follows the current state's logable flag. The paid flag separately controls payment behaviour and can create payment records on a status transition. Neither performs refund accounting or proves bank settlement. Review eligible states and payment reconciliation alongside the query.

  1. Allocate order-level discounts to eligible merchandise consistently. Handle free-shipping discounts separately.
  2. Join refunds at their proper row unit. Aggregate each one-to-many table before joining so tax or credit rows do not multiply sales.
  3. For returned goods, record whether stock is resellable and how its cost is recovered or written off.
  4. Apply one currency policy to sales, refunds, purchase costs and fees. Do not simply sum mixed-currency order totals.
  5. Resolve missing costs, then compute adjusted merchandise gross profit and the corresponding percentage.
  6. Add variable fulfilment, payment and marketing costs for contribution, then remaining expenses for operating/net results.

For an aggregate report, sum the adjusted order results within the same shop, currency and period definition. Do not combine shops or currencies without an explicit consolidation and exchange-rate policy.

Work through an order and its settlement

In a simplified hypothetical example with no tax, discounts or other payment adjustments, the customer pays EUR 100 for merchandise and the provider remits EUR 97.10 after its processing fee. The fee is EUR 2.90. Record EUR 100 as sales and EUR 2.90 as payment expense; recording only the remittance as sales and then subtracting the fee again understates the result.

If the courier charges EUR 6 and the customer paid no delivery charge, EUR 91.10 remains before product cost, packaging, marketing and overhead. That remainder is not profit. Match the order's transaction reference to the provider statement and the dispatch to the carrier invoice. A payout containing other orders needs a settlement bridge, rather than a direct comparison with this order alone.

Now rehearse a partial refund. Match the credit slip to the intended lines, confirm the money actually returned at the provider, and check the fee retained or charged under your contract. Recover product cost only for goods returned in the condition your inventory policy requires. Keep the original payment, refund and settlement references together so staff can explain the result after the order screen has changed.

Build the full cost inventory

Collect recurring and one-off costs separately, then classify them by behaviour and accounting treatment. Hosting is one line in the budget.

Cost areaIncludeOperational check
PaymentsPercentage/fixed fees, conversion charges, refund fees and chargeback fees. Track withheld processor reserves separately in the cash forecast.Reconcile provider statements to gross payments and net settlements.
ReturnsOutbound/inbound freight, retained processor fees, inspection, repacking and write-offs.Compare credit documents, gateway refunds and merchandise returns separately.
PackagingBoxes, protection, tape, inserts, labels and picking labour.Measure actual cost by parcel type and order mix.
ContentPhotography, licences, retouching, descriptions, translations and maintenance.Budget for each new or changed SKU.
Hosting and mediaCompute, storage, backups, monitoring, domain and certificates where charged.Review image volume and regeneration workload.
ComplianceNecessary accounting/legal work, privacy processes and consent implementation.Match services to actual duties rather than assuming every paid subscription is mandatory.
MarketingAcquisition, retention, email, feeds, creative and channel tools.Keep attributed campaign spend and broader brand costs distinct.
Software and supportModules, update/support renewals, accounting connectors, helpdesk and automation.Inventory contracts and renewal dates; compare total ongoing cost.
People and owner timePay, employer costs, contractors, supervision and training.Track actual hours and a separate owner-time scenario where needed.

Changing an image type under Design > Image Settings does not automatically regenerate the whole catalogue. Existing thumbnails require a separate regeneration action. Plan its selected scope, storage and server time.

Payment > Preferences can restrict methods for supported customer-group, country, currency and carrier combinations, but paymentOptions presents options rather than supplying a generic order surcharge. A surcharge implementation also needs consistent server-side pricing, tax, order and refund handling.

In the EU, surcharges are prohibited for covered consumer cards. Review any exception and national restrictions before considering a payment fee; see EU payment guidance. Do not add a fee merely because a module can display it.

A credit slip can document a refund without triggering a provider refund. Verify the payment integration, the provider's fee-retention policy and any separate refund charge. Avoid counting the same refund once from the slip and again from the bank movement in the same profit calculation.

Choose and reconcile a reporting workflow

A spreadsheet can be enough if someone owns the recurring import and reconciliation. SQL helps build a repeatable dataset. A back-office report helps staff review it consistently. Choose by data coverage, maintenance effort and auditability.

Which reporting route fits your shop?

Your situationStarting routeWhat must be true
You need a periodic view and can reconcile a manageable set of files.A documented spreadsheet with saved input exports.A named owner can reproduce the result, explain adjustments and keep the source files.
Recurring document exports are the bottleneck.A saved invoice and credit-slip export profile, using Invoice CSV List Exporter where it fits.The selected document dates, paid/outstanding basis and columns match the recipient's requirement. The export supplies inputs, not a complete profit calculation.
Staff need a recurring shop-level result inside the back office.A reporting module with an agreed expense-entry and review process.Its actual revenue, refund, cost and currency treatment passes your sample reconciliation.
You need mixed-currency consolidation or product, customer and channel allocations.A scoped reporting dataset or the existing accounting/ERP workflow.Exchange rates, allocation rules and source ownership are explicit; an unadjusted dashboard total cannot substitute for them.

Financial Revolution provides a shop-level P&L based on invoice revenue, recorded credit-slip adjustments and expenses entered in the module, plus expense categories, cash-flow and VAT reports; use its module help for configuration.

Record and reconcile cost of goods and other expenses in the reporting workflow. Filling core product cost fields alone does not make that P&L subtract wholesale snapshots. Its invoice revenue includes only orders currently marked valid, so later state changes can change a past-period result. Expense categories are different from product or category cost allocations; check which breakdowns your installed release supports and which costs they include. Verify how its reporting currency handles revenue, refunds and expenses, including exchange rates, and reconcile mixed-currency results outside the raw total if rows are not converted consistently.

For product, order, customer or acquisition-channel contribution, define and implement allocations for discounts, fees, shipping, returns and marketing. A shop-level total cannot supply those breakdowns by itself.

Web analytics and financial reports answer different questions. GA4 or advertising attribution can explain traffic and conversions, but it is not your invoice, payment or cost ledger. Reconcile the different dates, consent coverage, refund treatment and attribution models before comparing totals.

Use the accounting and invoices guide to define invoice, payment and credit-document exports.

What to ask a developer or agency

  • Which source field supplies each cost, and how are combination costs, supplier prices and unknown historical costs distinguished?
  • What is the row unit of each export or SQL join, and how do you prove that multiple payments, invoices or credit slips cannot multiply order sales?
  • Can you trace the same sample order from its discount and invoice through a partial refund, carrier cost and provider settlement?
  • Which report dates, currencies and order-state rules apply, and can a later state change alter a closed period?
  • Who owns recurring imports and reconciliation, where are exceptions recorded, and how can staff rerun the report and reverse a configuration change?

Ask for the field mapping, saved report configuration, sample reconciliation and handover instructions. A screenshot of a plausible profit figure does not establish how the next period will be produced.

Use the numbers for pricing, promotions and stock

Compare contribution as well as sales volume. A high-volume item may earn little after returns and fulfilment, while a lower-volume item may leave more money per order. Include stock turnover, working capital and customer demand when choosing what to restock or promote.

Revenue does not rank profitability

This hypothetical monthly comparison uses tax-exclusive sales and complete costs on the same basis:

Store AStore B
Net salesEUR 50,000EUR 20,000
Cost of goodsEUR 37,500EUR 8,000
Other variable costsEUR 10,000EUR 3,000
Fixed operating costsEUR 2,000EUR 2,000
Operating profitEUR 500EUR 7,000

Discounts and price changes

With a selling price of 100 and unchanged total variable unit costs of 70, contribution is 30. A 20% discount leaves 80 minus 70, or 10. That removes two-thirds of the original contribution. Real payment fees or taxes may also change with price, so rerun the full model.

With the same starting price and unchanged total variable unit costs of 70, a 5% price increase changes unit contribution from 30 to 35, a 16.7% increase. Break-even retained volume is 30/35, so the maximum volume loss is about 14.3%, not 17%. This example assumes unit costs and mix stay unchanged; test demand rather than assuming an elasticity.

Set free-shipping thresholds from contribution after the subsidy, parcel mix and returns. Customer-paid shipping may cover only part of the actual cost. Avoid a single blanket discount ceiling for products with different economics.

Repeated purchases can reduce acquisition pressure, but still incur email, loyalty, discounts and remarketing costs. Compare the incremental contribution of retention and acquisition campaigns. Use the segmentation guide for customer-level analysis.

Track trends and reconcile the result

Use a consistent weekly review for unusual movements, a monthly close for cost completeness and seasonality, and a periodic review of pricing and inventory choices. Set the cadence to your operation rather than promising a fixed number of minutes.

  • Net sales, adjusted gross profit and contribution by the relevant product/order groups.
  • Missing cost values and changes in landed cost.
  • Returns by product and cohort, with physical returns separated from credit documents.
  • Acquisition and retention costs on a comparable basis.
  • Operating/net margin and a separate cash-flow forecast.

Growth can hide deterioration. In a hypothetical example, EUR 10,000 sales at 25% margin earns EUR 2,500. A 20% sales increase to EUR 12,000 at 15% margin earns EUR 1,800. Compare profit euros alongside margin percentages.

Close a month with a reconciliation worksheet

Use a worksheet alongside the report, with a source reference, reporting-period amount, cash date, adjustment and owner for each row. Keep provisional amounts visible until supporting documents arrive. Use the same rows again at the next close rather than rebuilding the logic.

Worksheet rowEntry and reconciliationCommon discrepancy to resolve
Invoice and credit-document bridgeTie document totals to the selected shop, currency and issue dates, retaining document identifiers and the report's inclusion rules.An order belongs to a different period from its invoice, or its current state changes eligibility.
Goods sold and stock recoveryMatch sold quantities to the chosen historical cost basis, then document resellable returns and write-offs.A stock purchase is deducted as well as the cost of those same goods sold.
Provider settlement bridgeExplain gross collections less refunds, fees and reserves, including movements still awaiting payout.A reserve release or a payout adjustment is mistaken for new sales.
Freight and returns accrualsMatch shipments and return handling to carrier or fulfilment invoices; replace provisional estimates when actual charges arrive.A late invoice is added without removing the earlier estimate.
Overhead and renewal coverageList subscriptions, support, people and content costs; distinguish the period expense from the cash payment under the agreed accounting policy.An annual renewal is omitted between payment dates or counted both as a renewal and a monthly allocation.

Keep unresolved differences in an exceptions list with an owner and the missing evidence. Have the responsible reviewer sign off the adjusted result and retain the worksheet with its source exports. A later correction should show the reason and affected period instead of silently replacing the old close.

Investigate differences between your report and the accounts: period boundaries, invoice versus order dates, unpaid invoices, state changes, tax, refunds, inventory valuation and exchange rates. Agree adjustments and lock the reporting period when reconciled.

Assess a move from side business to full time

Base the decision on household needs, business cash requirements and several scenarios. Revenue alone does not tell you what you can draw. A EUR 6,000 sales month with EUR 5,500 of relevant costs leaves EUR 500 before any omitted costs or tax.

  1. Review a full seasonal cycle in the Dashboard and the installed Stats reports where available. Check each report's inclusion rules and the order statuses under Shop Parameters > Order Settings > Statuses, then reconcile payments separately. Separate a holiday peak from sustainable demand.
  2. Check dependence on one product, supplier or acquisition channel. Confirm revenue attribution in the relevant analytics and campaign systems.
  3. Measure returning customers with a defined cohort or segmentation report. Registrations and a Best customers list are not a complete repeat-rate measure. Keep realised repeat-order contribution separate from projected customer lifetime value, and test when future purchases would actually produce cash before relying on them in the downside forecast.
  4. Calculate current owner hours and a clearly defined profit-per-hour measure. Model what extra hours would actually change.
  5. List lost salary/benefits, household commitments, taxes, insurance, reinvestment, stock and any new staffing costs.
  6. Build a base case and a downside case with lower sales, delayed settlements and extra returns.

There is no universal 70% living-expense readiness threshold or mandatory six-to-twelve-month reserve. Those can only be scenario assumptions. A growing EUR 3,000 monthly result is not inherently safer than a flat EUR 5,000 result; reserves, obligations and growth durability decide the comparison.

For a comparable profit-per-owner-hour measure, state whether the numerator is before owner remuneration or after it, and use that basis throughout. Count administration, sourcing, support, returns and bookkeeping hours as well as packing. If you also model an imputed wage for unpaid hours, show that scenario separately so the same hours do not reduce profit twice.

Calculate runway in currency and months

Separate business and household money. Exclude restricted tax money, essential working capital and committed payments from accessible reserves. Then divide the reserve available for the scenario by its monthly cash shortfall.

For example, if essential monthly outgoings are EUR 3,000 and dependable available inflow is EUR 2,100, the monthly gap is EUR 900. An available EUR 9,000 reserve covers 10 months at that gap. This ignores changing inventory needs and unexpected costs, so stress-test them separately. “30% in savings” alone specifies no runway duration.

Speak with your accountant before changing how the business pays you. Confirm tax registrations, VAT rules and legal structure from the actual facts; becoming full time does not automatically create the same obligations for everyone.

Use a staged transition and delegation plan

The following 90-day structure is an illustrative operating plan, not a forecast of growth or a required transition timetable.

  1. Before notice: reconcile several periods, test the downside forecast, separate accounts, build your chosen reserve, fix stock/tax/workflow issues and agree a stop/review point.
  2. Days 1 to 30: work on the defined commercial bottleneck and compare actual cash and contribution with the baseline. Preserve reliable fulfilment.
  3. Days 31 to 60: address the most expensive repeat task with a documented process, targeted automation or scoped help.
  4. Days 61 to 90: compare cash, profit per owner hour, service levels and remaining reserve with the plan. Adjust commitments while options remain.

Do not assume extra hours guarantee more orders or later financial recovery. Test the effect of product improvements, supplier negotiation, marketing and faster support against your own results.

For a first hire, compare full employment cost with realistic added contribution and the work you can hand over. For contractors, compare defined outputs, supervision and ongoing fees. Keep strategy and approval rules under clear ownership. The security guide explains named employee accounts, role permissions and partner access.

Questions owners ask

Do missing costs mean I need to rebuild the shop?

Missing cost records alone do not justify a rebuild. Identify whether the gap is data entry, an import mapping or a reporting limitation, then fix that part of the existing workflow. Require evidence that a replacement resolves a requirement your current setup cannot meet.

Should I change order statuses until the report matches?

Trace the difference first. Statuses also drive operational behaviour, so changing a flag merely to alter a dashboard can affect payment records or downstream integrations. Agree reporting adjustments separately and rehearse any necessary lifecycle change on staging.

Which cost should I use when the supplier raises its price?

Keep the historical result on its documented sale-time cost basis. Use the new supplier quote for a separate replacement-cost pricing scenario. Labelling the two views prevents a current buying decision from silently rewriting past performance.

Can I rank campaigns before every bill arrives?

Use a clearly labelled provisional contribution view with consistent allocations and an unallocated-cost balance. Record what is missing and revisit the ranking when late fees, returns and invoices arrive. Do not present an incomplete campaign comparison as the reconciled business result.

Loading...
Back to top