Skip to content
tnova
All articles

How to read tnova gift-box CSV reports without double-counting

Choose the right export for sales totals, saved configurations or component review. Learn why a box amount repeats on component rows and how dates, tests and unknowns affect comparisons.

By tnova teamGuides7 min readUpdated

Quick answer: Use tnova's summary CSV for reported daily box amounts and its orders CSV for component-level review. Do not sum the orders export's box_amount_after_discount down every row: the same box-group amount repeats beside each component line. Match the export's date basis, currency, test flags and known/unknown status before comparing it with Shopify Analytics.

This guide describes the implemented Data and orders workflow for an authorized tnova store. Public installation is being prepared. The examples below are fictional report rows, not production sales results. The goal is a usable operational report, not a replacement for your store's accounting or payment records.

Choose the export that answers your question

Open Data and orders, choose All boxes or one saved box, and apply the period. The page offers three CSV exports with different row meanings:

ExportWhat a row representsUseful task
summaryOne shop-timezone day and currency with recorded box amountsReview sales excluding tax, component refunds, net and unknown adjustments
configurationsOne saved box configuration, using its current saved draft fieldsReview names, state, active version, price, item count and candidate count
ordersOne audited component line within a box group, or an issue record when no box group is identifiedTrace variant IDs, original/current quantities and reconciliation issues

The configurations export is a current settings snapshot. A historical date filter does not turn its saved draft price into the price customers paid during that period. Use the order's recorded version and amounts for that question. The test-order audit explains how the purchased selection is checked against its original version.

For the summary, net_ex_tax is reported box sales minus recorded component refunds, excluding tax. It excludes shipping and app fees, and it does not deduct product costs, packaging or payment fees. Treating this number as profit would skip those costs.

Read the period as an interval, not just two calendar dates

The custom filter takes UTC timestamps ending in Z. Start is inclusive; end is exclusive. The end must be after the start and no later than now; the implementation permits a range of at most 397 days. The displayed daily rows use the shop timezone shown above the report.

For a fictional shop set to Asia/Shanghai, local October 12 runs from:

  • Start: 2026-10-11T16:00:00Z.
  • End: 2026-10-12T16:00:00Z.

An event exactly at the end belongs to the next interval. A shop using a timezone with daylight-saving changes needs the actual offsets for its chosen dates. Do not copy this eight-hour conversion into another shop.

The Last 7 days and Last 30 days shortcuts use rolling intervals ending at the current time. For comparisons of complete local calendar days, enter explicit boundaries and record the shop timezone. Keep that note beside the downloaded file.

Count a box-group amount once, even when it has several rows

Consider this simplified fictional orders export for one six-item box. Taxes are excluded from the example so the arithmetic stays focused on row meaning:

order_idgroup_idvariant_idpurchased_quantitybox_amount_after_discount
123456789group-Avariant-berry230.0000
123456789group-Avariant-cocoa230.0000
123456789group-Avariant-lemon230.0000

There are three component rows, six purchased item units and one group amount of 30.0000. Summing the last column gives 90.0000, which counts the same amount three times. The column describes the group, not the individual component's allocated value.

Use the summary export for tnova's reported monetary totals. If you need a manual group review from the orders file, group by order_id and group_id, retain the configuration/version and currency, and check that the repeated nonblank amount agrees within the group. Count that amount once. Leave a blank or inconsistent value unresolved instead of converting it to zero. Even a correctly deduplicated after-discount amount is not automatically the summary's paid, tax-excluded sales figure.

Shopify can represent the same variant with more than one component line, including when amounts need to be allocated across quantities. Preserve line_id in the review. Sum purchased quantities only within the intended group and variant; count distinct order IDs when the question is orders, not CSV rows. The packing handoff guide explains why component units and copies of a box also need separate interpretation.

Separate the sale date from the order and refund dates

tnova's summary places box sales at the confirmed successful payment time and component refunds at their processed time. The orders export selects order records by order creation time. Those bases can produce different sets of records for the same interval.

Suppose a fictional order was created on October 10, payment was confirmed on October 11, and a successful component refund of 5.0000 was processed on October 12. With a tax-excluded box amount of 30.0000, the summary can show:

Shop daySales excluding taxComponent refundsNet
October 1130.00000.000030.0000
October 120.00005.0000-5.0000

An orders export limited to October 11 will not include that order if its creation falls outside the interval. To trace it, choose a creation-time range that includes October 10. The negative October 12 net reflects a refund from an earlier purchase; it does not establish a new negative-price sale.

Component refund totals require recorded successful refund transaction evidence. A changed current_quantity does not by itself prove that money was refunded. A custom adjustment without a linked box component is outside this component-refund total. Use Shopify's order and transaction details to review the wider refund; the component-refund guide covers that check.

Compare with Shopify only after matching the metric

Shopify's current sales-report documentation distinguishes sales from payments. Its sales reports can include pending, open and canceled orders; sales appear on the sale day and sales reversals on their processing day. That scope differs from tnova's payment-confirmed box summary.

Before expecting two totals to agree, write down the same currency and period, whether the comparison covers only box components or the whole order, and whether taxes, shipping, discounts and adjustments are included. Use the specific Shopify report's definition. “Total sales” and tnova's net_ex_tax are different measures.

tnova excludes Shopify-marked test orders and documented verification orders from summary sales totals. Its orders export can retain them for inspection, with test and verification_purpose fields. Keep those fields when reviewing the file. Shopify also documents differences between sales reports and order exports, including test orders appearing in an order export while being excluded from sales reports. An audit row is not automatically a sale to count.

Keep missing evidence visible in the handoff

Check Pending, Last order sync, payment state and integrity state before interpreting an unexpected total. Payment confirmation and component integrity answer separate questions. The integrity-exception count describes the latest 100 displayed records, not an unlimited review of every historical order.

In the summary file, unknown_adjustments counts unresolved monetary entries. It is a count, not a currency amount. An empty daily table does not establish that the store had no sales. Incomplete synchronization, a different date basis or unavailable evidence may need investigation.

Record the file type, box filter, UTC boundaries, shop timezone, currency and download time when handing off the report. For a discrepancy, retain the relevant order/group/line references and visible issues. Use Read and reconcile order for an accessible recent order, then refresh the report and download it again. Current reconciliation covers orders created within 60 days; order details are retained for 90 days from creation. A longer summary interval does not extend that detailed order window.

Keep the original export alongside any working copy. This preserves the evidence behind your interpretation and makes a focused support report easier to prepare if the difference remains unresolved.

About this guide: Prepared with AI assistance and checked against tnova's report/export and order-reconciliation implementation and the official Shopify sources linked here on October 14, 2026. All rows, dates and monetary examples are illustrative; no customer results or accounting certification are claimed.

See a gift box in action

Try the sample picker with fictional products. It creates no cart or order.

Try the box builder