Start with the guided setup
Open the dedicated Profit & Loss setup guide at /pnl-guide, then open Profit & Loss. The current guide has five numbered setup steps. Its useful starting point is one enabled form, the last 30 days, paid orders, first fully settled date, saved order categories, the guided shipping recommendation, and the Products lens. Saved views, schedules, custom categories, exports, and form overrides remain optional follow-up tools.
EZFormz P&L is a seller-management report, not accounting or tax software. It does not provide a balance sheet, payroll, payables, receivables, bank reconciliation, or tax filing.
Choose the forms to include
For each form, open Form Settings → Profit & Loss and turn on Enable Profit & Loss for this form. The owner-only switch saves immediately; publishing unrelated Builder changes is not required. Forms with P&L off are excluded from reports, order cost editing, dedicated P&L Sheets, and new order cost snapshots.
Start with one form while learning the report, then enable other sales forms intentionally. Account reports include all enabled owned forms; choosing one form diagnoses that operation without assigning account-wide overhead to it.
P&L settings and costs are not buyer-visible and do not change product prices, checkout totals, payments, receipts, stock, coupons, or public forms. Give owner API keys and connected AI tools only to people and services trusted with cost data: authorized API and AI product operations can include unit-cost fields under their own scopes even though form collaborators need explicit P&L permission in the dashboard.
Add current product costs
Enter the cost to obtain or make one sellable unit, not its selling price. A variant cost overrides its product-level default. A blank or invalid cost means unknown, not zero.
You can save current costs in either place:
- In Builder, open the Products block and its P&L tab.
- Open Account → Profit & Loss, choose an enabled owned form, and edit its product and variant costs.
- In Profit & Loss, open Missing Costs, choose the form and filters, enter costs under Product Costs for Unresolved Orders, then choose Save product costs.
Saving a catalogue cost affects future order snapshots and newly repriced item lines. It does not silently rewrite old orders. Revenue and order count remain visible for an order with an unknown cost, but the dependent product cost, total cost, profit, and margin remain unavailable until that saved snapshot is repaired.
Import costs from a spreadsheet
In Missing Costs, choose exactly one P&L form before uploading a .csv, .tsv, or .txt file or pasting rows. The recommended headers are product_name, option_label, and unit_cost. For the most exact match, use option_id and unit_cost; common product, variant, cost, COGS, category, and ID header aliases are also recognized.
EZFormz matches an exact option ID first, or exact normalized product and option labels when IDs are absent. The review shows automatic matches, skipped rows, and ambiguous or unmatched rows. Choose the intended existing product and variant for every row needing help, then choose Apply costs.
This cost import updates existing variant costs only. It does not create products, change selling prices, or update historical orders. Use the Builder Products CSV importer when you intend to create or bulk-add catalogue products; use the P&L import when you intend to set reporting costs. The product importer is add-only and can duplicate a catalogue if you re-import an export.
Preview and apply historical costs
After saving current costs, a variant can remain in Missing Costs while older order snapshots are unresolved. Choose the historical mode deliberately:
- Backfill missing snapshots only fills only matching order items whose saved cost is unknown.
- Overwrite matching snapshots replaces matching saved P&L cost fields and should be used only when the chosen cost is appropriate for those historical orders.
Choose Preview old-order update, review the frozen form, filters, mode, cost values, and candidate count, then choose Apply to old orders. A large job continues in bounded batches and resumes from its job ID after reload. Only one active historical-cost job can run for a form.
The job validates all candidates before its first write. If an order, payment obligation, selected cost, mode, or source contract changes:
- Preview is stale means no candidate was changed. Create a fresh preview.
- Partially applied means the displayed committed prefix remains changed, while later candidates were stopped. Create a fresh preview for the remainder.
- Cancel stops future progress but does not undo an already committed prefix.
Historical backfill changes only unitCost, costTotal, and costSource in the saved P&L item snapshot. It never changes the buyer price, order total, payment, stock, coupon, receipt, or standard order Sheet. For a genuinely different one-off historical cost, expand that order on the Orders page and use its P&L costs panel instead of applying today's cost broadly.
Confirm the shipping policy
Open Review how shipping affects profit and read the current and proposed formulas, applicable-order coverage, and fee coverage. Choose the policy that matches your records:
- Actual shipping economics uses durable postage purchases and optional recorded insurance. It is recommended only when every applicable order in the selected scope has complete cost coverage.
- Pass-through neutralizes shipping collected when the actual cost is unavailable and is the conservative starting point for incomplete coverage.
- Per-order manual uses saved shipping cost on each order.
- Period manual uses shipping expenses recorded for the selected period.
- Assume no shipping cost confirms the fulfillment cost is truly zero; it can overstate profit when that is not true.
Free physical shipping, pickup, digital delivery, integrated label purchases and refunds, manual replacements, supplemental costs, missing amounts, conflicting sources, and non-USD evidence are classified separately. Read a shipping warning instead of treating missing evidence as zero.
Confirm payment-fee rules
Under Settings → Payment Fee Rules, start with a reviewed account default. Add a form override only when that form differs, and a payment-method override only when that method differs. The matching priority is payment method, then form, then account.
Rules can be None, flat, percent, or percent plus flat. Confirm None only when the fee is truly zero; no matching reviewed rule remains missing configuration. Choose whether a buyer-paid payment surcharge remains revenue, offsets the estimated fee, or is ignored in P&L gross sales. These are estimates from the saved order total and do not change the actual surcharge or payment record.
Decide whether the report is ready
Review Coverage, Data Quality, and Recommended actions before trusting a headline. A useful starting report should have:
- The intended enabled forms and no unintended forms.
- Sufficient product-cost coverage for the decision period.
- A shipping formula that matches how postage is bought or recorded.
- A reviewed rule for every payment method in the period, including confirmed zero-fee methods.
- Understood or resolved refund, settlement, and data-quality notices.
- A displayed formula, status, and amount that make sense before saving, exporting, or scheduling the view.
A report can preserve known revenue while one dependent profit lens is incomplete. Never read an unavailable value as zero. Continue with Choose P&L lenses, controls, and assumptions.