v3 · confidence scoring
Week of 17 Mar 2026
Total SKUs
14,284
all products
Star
Monitor
Pause
Kill
Zone breakdown
Avg checkout rate by category
Checkout rate vs score
0 selected
Product Score Zone Vel/day Chk rate Sessions Return % Stock Brand Gender Trend Analysis

Import Product Data

Upload your Shopify CSV exports. The importer reads your column headers, auto-maps known Shopify fields, and lets you manually map any unrecognised columns before loading into the dashboard.

Direct Shopify API — via proxy
Point to your deployed Cloudflare Worker proxy URL. The proxy holds your secret token — it never touches the browser. See the setup guide below.
Proxy URL
Route
Live connection — fetch data automatically
Paste a public CSV URL (Google Sheets published link, Coupler.io export, or your proxy endpoint) and the dashboard fetches it on every load. No manual file upload needed.
Products CSV URL
Analytics CSV URL
Saved URLs load automatically on next open.
or upload CSV files manually below
Upload files manually
Products CSV
Shopify Admin → Products → Export
Contains inventory, variants, tags, dates
Analytics CSV
Analytics → Reports → Sales / Sessions by product
Contains sessions, orders, checkout sessions
— or use sample data to try the importer —
How to set up a live connection
Three routes to get a URL that this dashboard can fetch automatically.
  • 1 Sign up at coupler.io → New importer → Source: Shopify
  • 2 Enter your Shopify store URL and grant access
  • 3 Destination: Google Sheets → select your sheet
  • 4 Schedule: Weekly, Monday 6am IST
  • 5 In Google Sheets: File → Share → Publish to web → CSV → Copy link
  • 6 Paste that link into the Products CSV URL field above
  • 7 Repeat for your Analytics sheet if you have a second Coupler importer for sales data
Cost: ~$19/mo. Handles Shopify's 2 req/sec rate limit and pagination for 14,000 products automatically.
Deploy this as a Cloudflare Worker (free tier, <2 min deploy). It holds your secret API token and the dashboard calls it safely.
// Cloudflare Worker — deploy at workers.cloudflare.com export default { async fetch(request) { const SHOP = 'fyva.myshopify.com'; const TOKEN = 'your-admin-api-token'; // set as env var const url = request.url; const type = new URL(url).searchParams.get('type'); const endpoint = type === 'analytics' ? `https://${SHOP}/admin/api/2024-10/orders.json?status=any&limit=250` : `https://${SHOP}/admin/api/2024-10/products.json?limit=250`; const resp = await fetch(endpoint, { headers: { 'X-Shopify-Access-Token': TOKEN } }); const data = await resp.json(); return new Response(JSON.stringify(data), { headers: { 'Content-Type': 'application/json', 'Access-Control-Allow-Origin': '*' } }); } };
Your Worker URL becomes: https://fyva-proxy.yourname.workers.dev?type=products — paste that into the URL field above.
Use Google Apps Script to pull from Shopify and write to a sheet automatically — then publish the sheet as CSV.
// Google Apps Script — Tools → Script editor function syncShopify() { const SHOP = 'fyva.myshopify.com'; const TOKEN = 'your-token'; // Script Properties → TOKEN const sheet = SpreadsheetApp.getActive().getSheetByName('Products'); const resp = UrlFetchApp.fetch( `https://${SHOP}/admin/api/2024-10/products.json?limit=250`, { headers: { 'X-Shopify-Access-Token': TOKEN } } ); const products = JSON.parse(resp.getContentText()).products; sheet.clearContents(); sheet.appendRow(['Handle','Title','Type','Tags','Variant Price','Variant Inventory Qty','Published At']); products.forEach(p => p.variants.forEach(v => { sheet.appendRow([p.handle, p.title, p.product_type, p.tags, v.price, v.inventory_quantity, p.published_at]); })); } // Set trigger: Time-driven → Weekly → Monday 6am
  • 1 In your Google Sheet: Tools → Script editor → paste above
  • 2 Store your token: Project Settings → Script Properties → TOKEN
  • 3 Set trigger: clock icon → Add trigger → Weekly → Monday 6am
  • 4 File → Share → Publish to web → Sheet: Products → CSV → Copy link
  • 5 Paste that link into the Products CSV URL field above

Formula Settings

All scoring parameters live here. Changes apply to all products when you click Apply & Rescore. Every value drives the live scoring engine — not a spreadsheet, the actual formula running in this dashboard.

Component weights
Maximum points each signal can contribute. Must sum to 100. The weight bar below shows live distribution.
Signal 1
Sales velocity
How fast is it selling vs. catalog median. Discounted by velocity confidence (low sales = less trust).
Max points30pts
Signal 2 — confidence-weighted
Sessions-to-checkout rate
% of sessions reaching checkout, multiplied by session confidence. Low sessions = discount.
Max points25pts
Signal 3
Inventory health
Stock vs. ideal level. Zero stock is always zero points regardless of other signals.
Max points20pts
Signal 4
Size completeness
Variants in stock ÷ total variants. Hard override below the threshold in the Overrides section.
Max points15pts
Signal 5
Return rate guard
Penalises post-purchase dissatisfaction. 50%+ return rate scores zero on this component.
Max points7pts
Signal 6
Recency bonus
Benefit of doubt for newer products. Decays after the recency age cutoff set in Benchmarks.
Max points3pts
Weight distribution — must total 100
Total: 100 pts
Confidence thresholds
Below these thresholds, scores are discounted proportionally. This prevents small-sample noise from inflating scores — the fix you identified for the 30-session vs 1000-session problem.
Velocity confidence
Minimum sales for full trust
Products need at least this many sales in 30 days to earn full velocity points. Formula: MIN(1, sold_30d ÷ this value)
Full confidence at30sales
15 sales → conf 50%
Checkout confidence
Minimum sessions for full trust
Products need at least this many sessions before checkout rate is taken at face value. Formula: MIN(1, sessions ÷ this value)
Full confidence at200sessions
30 sessions → conf 15%
Benchmarks
The "median" reference values the formula compares each product against. Replace with MEDIAN() from your actual Shopify data after the first real data pull.
Velocity
Median catalog velocity
Products at or above this earn full velocity points. Replace 2.5 with your actual catalog median.
Median velocityunits/day
Checkout
Target checkout rate
Products at or above this earn full checkout points. 12% is the Indian apparel benchmark.
Benchmark rate%
Inventory
Ideal stock level
Stock above this earns full inventory points. Tune per category — lehengas vs. basic kurtas differ.
Ideal stockunits
Recency
Full bonus age cutoff
Products younger than this get full recency bonus. Bonus decays to zero over the same period beyond.
Full bonus underdays
Hard override rules
These fire before scoring. When triggered, the product is assigned directly to a zone and the score formula is skipped entirely.
Override 1
New product exemption
Products younger than this skip scoring and get status NEW. They enter normal scoring once they age past this.
Exempt if age belowdays
Override 2
Force KILL: high returns + low sales
If return rate exceeds the threshold AND units sold is below the minimum, product is forced to KILL.
Return rate above%
AND units sold belowunits
Override 3
Force PAUSE: size completeness
If fewer than this % of size variants are in stock, product is forced to PAUSE regardless of score.
Force PAUSE below% size completeness
Override 4
Seasonal hold tag
Products with this Shopify tag skip scoring. Managed via Shopify tags — applies immediately without rescoring.
Shopify tag name
Zone thresholds
Score ranges that determine zone assignment. Zones must not overlap — the dashboard enforces this on Apply.
STAR
Min:pts
Max:100
MONITOR
Min:pts
Max:69
PAUSE
Min:pts
Max:44
KILL
Min:0
Max:19
Applied — all products rescored.
F
Fyva Assistant
Ask about your products & scores
How many KILL products? Top 5 STAR products Worst checkout rate High returns products Low stock alerts Score distribution