E-commerce Returns Loss Analyzer avatar

E-commerce Returns Loss Analyzer

Pricing

from $3.00 / 1,000 sku analyzeds

Go to Apify Store
E-commerce Returns Loss Analyzer

E-commerce Returns Loss Analyzer

Prioritize return-heavy SKUs and variants using your own anonymous CSV/JSON data, with source evidence and cost-aware estimates. No Shopify access.

Pricing

from $3.00 / 1,000 sku analyzeds

Rating

0.0

(0)

Developer

AFK Digital

AFK Digital

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

2 days ago

Last modified

Categories

Share

E-commerce Returns Loss Analyzer (API16)

Offline SKU/variant return analytics for authorized CSV/JSON store exports. Not affiliated with Shopify. No Shopify credentials, scraping, review analysis, API10 catalog audit, LLM or third-party API.

Input

Select exactly one of returnsFile, returnsData (JSON array), returnsCsv (UTF-8 text). Optional salesFile/salesData/salesCsv and costsFile/costsData/costsCsv. Maximum 8 MiB and 100,000 rows per source. File uploads must be direct HTTPS api.apify.com key-value-store record URLs, with no redirect or external host. rightsConfirmed=true required; optional dateFrom/dateTo inclusive YYYY-MM-DD, currency 3-letter ISO code (default USD, no FX), resultLimit 1–500 SKUs (default 100).

Required returns columns: sku, positive integer quantity. Optional: row_id, variant, returned_at, return_reason_handle OR reason_code OR reason (only one). Sales: sku, quantity; optional row_id, variant, sold_at. Costs: sku and at least one component; optional row_id, variant, currency, nonrecoverable_unit_cost, return_shipping_per_unit, handling_per_unit, recovery_credit_per_unit. Every unexpected column is rejected.

Privacy and provenance

Remove customer names, IDs, addresses, emails, phones, customer notes, order notes and free-text before uploading. Unexpected columns fail validation; no original source row content appears in the Dataset. The Actor cannot undo personal data uploaded before validation. Only safe opaque row_id values are permitted; known emails rejected but no automatic method detects all sensitive content. Use retention/access controls in your Apify account.

Older Shopify ReturnReason codes, e.g. DEFECTIVE and SIZE_TOO_SMALL, are supported. The current Shopify GraphQL ReturnLineItem.returnReason is deprecated; use ReturnLineItem.returnReasonDefinition.handle (definition also exposes name and id). Names and free-text notes are not used. Shopify API scopes are not required. Sources: https://shopify.dev/docs/api/admin-graphql/latest/objects/ReturnLineItem ; https://shopify.dev/docs/api/admin-graphql/latest/objects/ReturnReasonDefinition ; https://shopify.dev/docs/api/admin-graphql/latest/enums/ReturnReason

Interpretation

Returned units: sum quantity on return dates. Period return percentage: 100 * returns / sales for same SKU and date interval, only if positive sales denominator exists. This is NOT an order-cohort rate; units may exceed contemporaneous sales, and percentages may be over 100%. Dates missing when filtering cause excluded rows and warnings. Reason distribution is returned UNIT counts for input reason handles/codes (no text inference). Known net cost uses unit quantity times supplied nonrecoverable inventory write-off + paid return shipping + processing/handling - actually recovered credit, only if each returned variant has at least some cost fields. EstimatedDirectLoss is shown ONLY when ALL FOUR components are explicitly given (zeros allowed) for every returned variant. This is a limited DIRECT cost estimate, NOT a calculation of lost revenue or lost profits. Enter inventory write-off only if truly unrecoverable. No unlisted operational costs or FX effects are inferred.

Priority ranking uses estimatedDirectLoss descending only when cost coverage is complete for every returned SKU; otherwise it uses returnedUnits descending, then SKU as tie-break. Each Dataset row includes SKU, reason and variant breakdown, sold and returned units, nullable period rate and loss, individual cost totals, up to 100 evidence row IDs per SKU and variant, cost-row IDs, warnings, priorityRank and priorityBasis. Full summary in default key-value store record SUMMARY. Evidence cap warning applies; item counts remain complete.

Examples and checks

examples/returns.csv, examples/returns.json, examples/sales.csv, examples/costs.csv, examples/input.json contain fictional nonpersonal data. For local checks:

python3 -m unittest discover -s tests -v
python3 -m src.local examples/input.json

Runtime uses Dockerfile and Python Apify SDK 4.1.0. Source is entirely separate from API01–API15.

Billing

Proposed event is sku-analyzed at $0.003 per delivered SKU. Synthetic platform apify-actor-start at $0.00005/run. No per-raw-row charge; default Dataset charging event must be disabled. Cloud run enforces event limits by SDK and validates paid SKU event before delivering data. A failed validation produces no billable SKU event. Platform may still bill a one-time startup event. See PRICING.md and reports/ for measured cost and status. No sales guarantee.

Delivery limits and summary scopes

Dataset contains only the billed/delivered SKU rows. SUMMARY distinguishes skuCount (all qualifying SKUs), selectedSkuCount (after resultLimit), deliveredSkuCount/outputSkuCount (actually saved), and omittedSkuCount (not saved due to limit or run budget). Summary's whole-period return units and total direct loss, when available, cover all qualifying SKUs, not only delivered Dataset rows; see totalEstimatedDirectLossScope. Evidence IDs generated when no row_id exists refer to the anonymous input source position (such as returns:1); they are not Shopify-issued identifiers. Keep source files to re-check them.

Any budget limit can yield a truncated ranking. Start a separate higher-budget run to receive additional rows, rather than assuming truncated output is exhaustive.