Overview
Cost of Goods Sold (COGS) is the direct product cost of the units you sell. Setting it in Dashboardly makes Gross Profit, Net Profit, Margin, and ROI meaningful instead of overstated.
Dashboardly keeps two seller-entered costs separate:
- Unit COG is the direct product cost for one unit.
- FBS shipping / unit is an outbound seller-fulfilled shipping fallback used only when TikTok does not provide an order shipping cost.
Both values can be stored as dated periods. An Effective Date controls when a value starts, and the value remains active until the next dated value begins. Adding a July cost therefore does not rewrite the cost used for March.
Product Defaults and SKU Overrides
Use a product-level value when all variants share the same cost. A SKU can have its own dated periods when that variant costs more or less.
Dashboardly resolves the dated fallback for a sold unit in this order:
- The SKU period active on the order date
- The product period active on the order date
- The SKU's durable default
- The product's durable default
- Zero if neither level has a usable value
A SKU-specific value overrides the product default only for that SKU. It does not change the other variants.
Product and SKU histories remain separate. A SKU period does not create a product period or make the product default appear set. When the product default is empty but one or more child SKUs have costs, the product row shows Mixed and the individual values remain on those SKUs. When a product value exists alongside SKU-specific periods, a flag beside the product value indicates that some SKUs override it. Creating a product period later gives every current and future SKU a fallback without overwriting existing SKU-specific periods.
Set One Cost for All Sales History
When the same Unit COG should cover every historical sale, select All history instead of entering an Effective Date.
Dashboardly automatically starts the period on the first qualifying sale date in the shop's timezone:
- For a product default, it uses the first sale of any current or historical SKU in that product, including a variant that was later deleted.
- For a SKU override, it uses the first sale of that SKU.
- Unpaid, on-hold, and cancelled-before-shipment orders are ignored.
- A cancelled order that was already shipped remains a qualifying sale because it could have consumed inventory.
- If no SKU in a product has a qualifying sale, a product-level All history period cannot be saved yet.
- If the selected SKU has no qualifying sale, a SKU-level All history period cannot be saved yet.
- In either case, choose Immediate to start the new product default or SKU override today.
Existing periods that start later remain unchanged. All history fills only the earlier part of the timeline and does not overwrite a later supplier-cost change.
Immediate creates a dated cost period starting on today's date in the shop's timezone. Use Custom date for another start date, or All history when the value should also cover earlier sales. When FIFO costing applies, a priced shipment lot remains higher priority than the dated period.
Manage Product or SKU Costs from Product Overview
Open a product in Sales & Profit, then select Manage Unit COG.
- If a specific SKU tab is selected, the manager opens directly for that SKU.
- If All SKUs is selected, the manager opens the product default that applies to current and future SKUs, even when the product currently has only one SKU.
The manager shows the currently effective Unit COG and the complete dated history. Use Edit current period to correct the selected period or Add new period to schedule a new cost.
Editing a Default entry changes the durable product or SKU fallback. It does not convert the default into a dated period or alter existing dated periods.
Deleting a Default entry clears the product default or resets the selected SKU override through the corresponding action. A reset SKU immediately falls back to the applicable product value, or shows Not set when no fallback exists.
Older SKU defaults may not have a dated history entry. Dashboardly still shows these values as SKU default and provides Edit default and Reset actions. Editing uses the same durable SKU fallback; resetting returns the SKU to the applicable product fallback.
Unit COG must be greater than zero and no more than $999,999.99. To remove a default, use Clear or Reset instead of entering zero.

The date range selected on the report does not limit the cost period you can manage. Profit calculations use whichever COG period was active on each order date.
Manage Costs from Inventory
Inventory is the main workspace for product defaults, SKU overrides, outbound FBS shipping defaults, and cost history.
Dated-cost controls become available automatically for an active connected shop after its initial full import and required cost preparation finish successfully. No support-side activation is required. Dashboardly checks the active shop again whenever Inventory loads, so a ready shop does not have to wait for a later background rollout before Bulk costs, Import Costs, and cost-history controls appear. While the required preparation is incomplete, dated-cost controls remain unavailable so Dashboardly cannot save periods against partial data.
Without COGS keeps a product in the results while at least one visible SKU variant still has no usable cost. For a listing with many variants, setting one SKU cost does not hide the product before the other variants are priced.
If TikTok deactivates or removes a listing after it has sold, Dashboardly keeps the sold product available for historical cost work. Choose All in Inventory if the older listing is outside the Active or sold view, then open the product or use the cost controls to add an All history value. Removed listings with no recorded sales stay hidden.
Edit a Product or SKU
Use the pencil beside Unit COG or Shipping Cost / Unit on the appropriate row. Product rows manage defaults; expanded SKU rows manage variant-specific overrides.
Update Several Products
Select Bulk costs to apply Unit COG, FBS shipping / unit, or both to several products with an immediate or custom Effective Date. Leaving one cost field blank preserves that value.
Bulk FBS shipping is product-scoped: Dashboardly writes the selected value to every current SKU in each selected product and replaces SKU-level FBS shipping periods within the affected date range. Imported FBT warehouse shipping and fulfillment fees remain separate.
If a dated update or spreadsheet started on the wrong day, open Bulk costs and switch the action to Delete dated costs. Choose the exact Effective Date and whether to remove Unit COG periods, FBS shipping periods, or both. You can apply the deletion to the selected products or to every matching product in the active shop. Dashboardly reconnects the surrounding timeline automatically, so the previous dated value resumes until the next remaining period begins.
Large updates and deletions continue in the background after Dashboardly accepts them. Inventory refreshes when the operation finishes. Deleting a dated period never removes FIFO shipment lots, durable product or SKU defaults, or TikTok FBT warehouse fees.
Import a Spreadsheet
Select Import Costs and choose the layout that best matches your workflow:
- Products only — one default-cost row per product; this is the default.
- Tree view — products followed by their child SKUs.
- Flat view — SKU rows only.

Download the current template, enter values in New Unit COG and/or New FBS Shipping Cost, and upload it again. Existing/current-value columns are reference-only.
Fresh templates show the Unit COG and FBS shipping periods effective today in the shop's timezone. After an import, download the template again when you want to confirm the exact current values.
A removed SKU remains in the cost template only when it has historical sales that may still need COGS. Removed SKUs with no recorded sales are excluded. As a result, the template can contain historical sold SKUs that do not appear in the current Inventory table or regular Inventory export; this is intentional so past profit can still be corrected.
The regular Inventory Export CSV now includes Product ID and preserves long Product and SKU IDs as spreadsheet text. You can upload a current export through Import Costs after editing Unit COG or Shipping Cost / Unit. Every nonblank cost in that CSV is treated as a value to apply on the selected Effective Date, so the dedicated template—with blank New columns—is the safer choice for a small targeted update.
An Inventory export downloaded before August 31, 2026 is missing Product ID and cannot be imported safely. Dashboardly identifies that legacy file and directs you to download the latest Import Costs template instead of returning thousands of row-level Product ID and duplicate-ID errors.
Dated Unit COG and FBS shipping values are stored to six decimal places. If a spreadsheet formula produces additional decimal places, the import preview shows the rounded value with up to six decimal places and reports how many valid values will be rounded before you confirm the import. Negative values and values outside the supported range remain blocked.
Import Multiple Cost Periods at Once
Repeat the same Product or SKU row and give each row its own Effective Date.
| Seller SKU | Effective Date | New Unit COG | New FBS Shipping Cost |
|---|---|---|---|
| SKU-RED-M | 2026-01-01 | 8.25 | 5.90 |
| SKU-RED-M | 2026-04-01 | 8.60 | 6.10 |
| SKU-RED-M | 2026-07-01 | 9.10 | 6.25 |
The January values apply through March 31, the April values through June 30, and the July values from July 1 onward. When a row has no date, the dialog's Default effective date is used. A row-level date always wins.
Upload Dated COGS from a Warehouse or ERP
Dashboardly API keys remain read-only by default. An owner or admin can create a key for exactly one shop and explicitly enable Allow dated COGS uploads.
Use that opt-in only for a trusted server-side warehouse or ERP integration. It permits dated COGS updates inside Dashboardly for the selected shop; it does not allow writes to TikTok Shop and is not exposed as an AI/MCP action. Keep the key server-side and never place it in browser code.
How Costs Reach Profit Reports
For each sold unit, Dashboardly uses:
- A priced FIFO inventory lot when one covers that unit
- Otherwise the applicable SKU dated period
- Otherwise the applicable product dated period
- Otherwise the durable SKU default
- Otherwise the durable product default
- Otherwise zero
The same resolved COGS feeds Inventory, Sales & Profit, Product Overview, Profit & Loss, and exports. SKU periods therefore affect only the selected variant, while product periods provide the fallback for variants without their own cost.
After a cost import, bulk update, or period deletion, Dashboardly recalculates the affected reporting days in the background, including closed historical periods. While recalculation is pending, a report can show its previous completed snapshot; viewing that snapshot does not mean the cost update is complete. When recalculation finishes, the affected Profit & Loss, Sales & Profit, Product Overview, and export snapshots are refreshed automatically so they all use the completed cost data.
Inventory displays the cost that is effective today. If a dated product or SKU period is active, it can differ from the durable SKU default. Manage Unit COG keeps separate Edit/Reset actions for that fallback so changing it does not overwrite the active period.
For seller-fulfilled outbound shipping, TikTok's imported order/settlement value remains authoritative. Your dated FBS shipping value is a fallback when that value is unavailable.
What to Include
Unit COG normally includes supplier or manufacturing cost, packaging, and other direct per-unit product costs. Do not include TikTok fees, advertising, overhead, or outbound FBS shipping because Dashboardly tracks those separately.
For inbound freight, customs, or import VAT tied to inventory receipts, use FIFO Cost Tracking so the landed cost can be distributed across received units.
When You Cannot Set a Cost for Every Listing
High-volume LIVE sellers can create more one-off or frequently changing listings than they can realistically cost one by one. TikTok's Order API does not expose a complete LIVE, auction, temporary, or permanent listing-type classifier.
When TikTok creates an exact relisting with the same product name and the same Seller SKU set, Dashboardly keeps later orders connected to the original product and its configured costs. A renamed listing, a spelling change, or a different Seller SKU set is treated as a separate product, so review it under Inventory > Without COGS and set its cost before relying on profit totals.
Any sale with unresolved cost is still counted in revenue with COGS of 0, so
Gross Profit, Net Profit, Margin and ROI all look better than reality.
You have two options, and they can be combined:
- Group similar items under one product and set a cost on the parent. Dashboardly applies a product-level cost to every SKU underneath it. This works when the grouped items share a similar cost.
- Exclude uncosted sales from your reports. On Dashboard, Profit & Loss, Sales & Profit, or Product Overview, open Filters and set Sales scope to Only sales with a cost set. Dashboardly recalculates the financial report for the products you have actually costed. Choose Only sales without a cost to see exactly what is being excluded and which listings still need a cost.
Sales scope is available with both Order date and Statement date. A Statement-date report uses finalized activity in the selected Seller Center days to decide which products belong to the period, but it checks each product's cost on the original order day. For example, a July refund for a May order uses the cost that covered the May sale; Dashboardly does not move that sale onto a July cost period.
The selected cost scope uses the same finalized Statement-period Product/SKU population on Profit & Loss, Sales & Profit, SKU details, and CSV exports. Shop-wide adjustments are allocated with that same Statement-period sales mix, so changing between costed and uncosted views does not introduce an Order-date denominator into a Statement-date report.
If a report cannot apply the selected scope safely for the requested period, Dashboardly clears the shared filter, reloads All sales, and explains the fallback in the Filters control. It never leaves a page mixing scoped and unscoped financial figures under an active filter.
When you later add an All history period, or another dated period that covers the sale date, those sales automatically return to the costed scope -- you never have to re-run anything.
Common Questions
Why did a past period not change?
The saved cost begins on its Effective Date. Add or edit the period that covers the earlier order dates instead of overwriting the current period.
What does Immediate mean?
Immediate creates a dated Unit COG period starting on today's date in the shop's timezone. Choose Custom date for another start date, or All history when one value should cover every qualifying historical sale. When FIFO costing applies, a priced shipment lot remains higher priority than the dated period.
Can I apply one Unit COG to every historical sale?
Yes. Add a period and select All history. Dashboardly finds the first qualifying sale date automatically, so you do not need to look up or enter the date.
Why does one SKU ignore the product value?
That SKU has its own active period. SKU periods take priority over product defaults for the same dates.
Why is COGS still zero?
Confirm that the sold SKU has either a SKU period, an applicable product period, or a priced FIFO lot for the order date. A future-dated period does not apply to earlier sales.
If a high-volume or one-off listing has no practical per-item cost, see When You Cannot Set a Cost.
How much of my revenue has no cost set?
Open Filters on Profit & Loss, Dashboard, Sales & Profit, or Product Overview. Under Sales scope, select Only sales without a cost to show exactly the sales that still need cost coverage. On Profit & Loss, Dashboardly also shows the share of gross sales in the selected period that has no cost of goods.
Why does COGS differ from Unit COG multiplied by units?
Priced FIFO lots have higher priority for the quantities they cover. Open FIFO Cost Tracking to review the inventory lots used for those units.
Does COGS apply to cancelled or refunded orders?
An order cancelled before shipment does not consume inventory. A shipped item that is not returned keeps its inventory cost. A physically returned item reverses the inventory-cost impact.