Help & Support
Reach a human or find answers to the questions people ask most.
Get in touch
24 hours Monday–Friday
48 hours weekends
Frequently asked questions
How is Net Profit calculated?
Net Profit = Gross Revenue − Refunds + Shipping − COGS − Transaction Fees − Ad Spend
Revenue and shipping come from Shopify's paid orders. Refunds are subtracted on the day they're processed. COGS is per line item from Shopify's inventoryItem.unitCost, overridable in the Product Costs page. Transaction Fees are estimated per payment gateway. Ad Spend comes from your Facebook Ads account, filtered by campaign keyword.
Why does COGS show 0 on some products?
Shopify's inventoryItem.unitCost is only populated if you set a cost per variant in Shopify Admin (Products → Variant → Cost per item). If it's blank, we save it as 0.
Go to Product Costs to override with the real cost — we'll use your override for all future calculations.
How often does data sync?
Orders and Facebook ad spend refresh every 5 minutes automatically. You can also trigger a manual sync from the Dashboard's ⋯ menu → "Full sync".
New orders typically appear within 5 minutes of being placed. Facebook usually publishes daily totals with a 24-hour delay for attribution.
Can I connect multiple stores?
Yes — the Growth plan supports up to 3 stores, Scale supports unlimited. Each store is scoped separately (own Shopify token, own FB campaign filter, own P&L), then the "All Stores" view rolls them up in CHF.
Which currencies are supported?
CHF, EUR, USD, GBP, AUD, CAD today. Each store displays amounts in its native currency; "All Stores" aggregates to CHF using live ECB rates from frankfurter.app (refreshed daily).
Current rates are visible on the Settings page.
What data does LiveProfit store?
We store your order metadata (order names, dates, line items, revenue, refunds, shipping, financial status) and your Facebook ad spend by campaign per day. That's it.
We do not store customer names, emails, or payment details. When you uninstall the app, we hold your data for 48 hours (in case of reinstall) then permanently delete every trace: orders, ad spend, product costs, store record.
How do I cancel my subscription?
Go to the Subscription page and hit the cancel button — you keep access until the end of the current billing period. No cancellation fees, no lock-in.
Do you support Zendrop / AutoDS / other suppliers?
Zendrop: native integration live. Paste your API key in Settings → Supplier integrations, and per-product costs sync automatically nightly. New products get their COGS backfilled on the first Shopify import.
AutoDS + Spocket: coming in a follow-up sprint (their API access is under review). Meanwhile, enter costs manually on the Product Costs page or import via CSV.
Custom suppliers / DSers: manual entry or CSV import — same workflow as AutoDS/Spocket during that gap.
My Ad Spend doesn't match Facebook Ads Manager — why?
LiveProfit only counts campaigns whose name contains your store's "FB Campaign Filter" keyword (set on the Settings page). This lets multi-brand advertisers attribute spend correctly.
If the filter is empty or doesn't match your campaigns, spend won't appear. Check the keyword matches at least part of your campaign names (case-insensitive). Facebook's own totals include all your campaigns regardless of filter — that's usually the source of any mismatch.
Can I export my data as CSV?
Yes — the "Export CSV" button on the Dashboard downloads orders, P&L breakdowns, and per-product summaries for the selected date range. The same data is also available via the public REST API on the Scale plan.
Do you have a mobile app?
Yes — you can install LiveProfit as a Progressive Web App (PWA) directly from your phone browser. On iOS Safari: tap Share → Add to Home Screen. On Android Chrome: the install prompt appears automatically after a few visits.
Native iOS and Android apps (App Store + Play Store) launch late 2026 — you'll get a notification in-app when they're available.
Can I get alerts on Slack / Discord / Teams?
Yes — go to Integrations and paste your webhook URL. LiveProfit will forward critical anomalies (ROAS drop, revenue spike, sync failures, low cash runway) plus daily digests to your channel of choice.
Zapier and Make apps are also live: search "LiveProfit" in either platform. Public REST API is available on the Scale plan for custom automations.
Is there a public API?
Yes — create an API key in Settings → Developer. Endpoints under /v1/* cover stores, orders, P&L, products, anomalies, and outbound webhook subscriptions. Rate limit: 300 requests/minute per key. Full docs at liveprofit.io/docs/api.
Data completeness
Dashboard banners flag data-quality and business anomalies. Here's what each type means and how to fix it.
Coverage gap — "MMM YYYY looks incomplete"
Ad spend is recorded for a month but very few order-days are in the database. Usually means Shopify orders were dropped or never synced (60-day API window, sync outage, etc.) while Facebook ad spend backfilled fine.
Fix: Re-import the missing orders from a Shopify Admin CSV export (see Re-import CSV below).
Impossible ROAS — "Ad spend N× revenue"
Last 30 days' ad spend is more than 3× tracked net revenue. Almost always a symptom of a coverage gap — resolve that first. If it persists after re-import, ads are genuinely underperforming.
Missing costs — "N products have missing costs"
Products appear on paid orders but have no cost entry in product_costs. Their COGS defaults to zero and inflates Net Profit.
Fix: Open Product Costs, use the "Missing cost" filter, and enter unit costs manually. For bulk updates you can also POST to /api/admin/catalog-sync-all which pulls costs from Shopify's inventoryItem.unitCost where available.
Sync stale — "Last sync N hours ago"
No new orders have been recorded in the last 6+ hours during Zurich business hours. The 5-minute incremental sync may be stuck, the Shopify token may have expired, or Shopify may be down.
Fix: Trigger a manual sync from Settings → "Full sync". Check the Sentry error log if the sync fails.
FB→orders gap — "N days of ad spend with 0 orders"
Days where Facebook charged > 50 CHF but no orders landed. Contiguous runs are bundled into a single banner. Usually a coverage gap symptom, occasionally a real outage (Shopify checkout broken, campaign misconfigured for the wrong region, etc.).
Fix: Verify the affected date range in Shopify Admin → Orders. If orders exist there, re-import via CSV. If not, dig into the campaign or store state.
Revenue drop — "Revenue dropped X% vs last week"
Last 7 completed days had > 50% less revenue than the prior 7, and ad spend didn't drop by more than 30% — so it's not just a paused campaign.
Fix: Check Shopify Admin for stuck orders (unfulfilled payment, sync backlog), inventory issues (an out-of-stock hero product), or a broken checkout / theme change.
Unprofitable product — "Product X is unprofitable"
Any product with more than 20 units sold in the last 30 days and a COGS ratio above 65% (i.e. supplier cost eats more than two-thirds of retail).
Fix: Reprice the SKU, source it from a cheaper supplier, or discontinue it. Click "View product →" on the banner to jump to Product Costs pre-filtered.
Re-importing orders from a Shopify Admin CSV export
Whenever a coverage gap or FB→orders gap banner appears, the fix is a CSV re-import from Shopify Admin:
- Shopify Admin → Orders → filter by date range that covers the flagged month.
- Click Export → "Selected date range" → "Orders, transactions, and refunds" → CSV. Download the file.
- Dry-run the import first so you can eyeball the row counts:
curl -X POST -F "file=@orders_export.csv" \ "https://app.liveprofit.io/api/admin/import-orders-csv?store_id=1&dry_run=true"
- Inspect
orders_built,orders_skipped_existing,by_month. If it looks right, dropdry_run=trueand run again to actually insert. - Re-run once more — you should see
orders_inserted: 0, confirming the import is idempotent. - Refresh the dashboard. The coverage_gap banner clears once the next 5-minute anomaly-cache cycle completes.
Do not trigger a Shopify Full Sync afterwards — it would re-normalize orders through calcCogs, overwriting any manually-corrected COGS.