Stocky data rescue, parsed locally in your browser

Export Stocky Purchase Orders to a Shopify CSV Before the Sunset

Stocky is being sunset, and the purchase-order history living inside it goes with it. Export your Stocky purchase-orders JSON yourself, drop the file here, and this tool flattens every purchase order and line item into a Shopify-shaped purchase-order and transfer review CSV worksheet. Parsing happens entirely in your browser with the File API — the tool never calls the Stocky API, never asks for a login or token, and never uploads your file anywhere.

Local browser scanSafe fixes onlyShopify-focused checks

Browser-side scan

Drop your Stocky purchase-orders JSON

-

No CSV selected

No CSV selectedExport your Stocky purchase-orders JSON, then drop it here to build a Shopify-shaped purchase-order review CSV. Parsed in your browser — no API call, no login, nothing uploaded.
Private by default. Your Stocky purchase-orders JSON export data stays in this browser session. The export applies only safe deterministic changes and leaves manual-review items in the findings list.

This tool reads the JSON file you exported from the Stocky purchase-orders API (or the Stocky app) and turns it into a flat, reviewable spreadsheet before the app shuts down. It walks the purchase_orders array, then each purchase order's purchase_items array (Stocky's line items), and writes one CSV row per line item while carrying down the PO-level context — PO number, supplier, receive location, and status. Per the public Stocky v2 API docs, Stocky records receipts with a received_at date and an item status rather than a tidy received-quantity number, so the tool reads an explicit received quantity when your export happens to include one and otherwise infers the receipt state from received_at and status, flagging anything partial or unconfirmed in a review note for manual checking. It is deterministic and runs locally: ambiguous cost, missing receipts, and a likely-paginated export stay as warnings rather than guesses. The result is a manual-review worksheet, not an import — it does not call the Stocky API, does not authenticate, does not store any credentials, and pushes nothing back to Shopify or Stocky.

Import blockers

Common causes this scan checks

  • Stocky is scheduled to be sunset and its purchase-order history is not migrated into Shopify automatically, so merchants need a local copy before access ends.
  • The Stocky purchase-orders API returns deeply nested JSON (a purchase_orders array, each with a purchase_items array), which is hard to read or hand to a bookkeeper as-is.
  • Stocky exposes no received-quantity field — receipt is tracked with received_at and an item status — so it is easy to lose track of which lines were actually delivered once the app goes away.
  • The Stocky list endpoint pages with limit, offset, and since_id, so a one-shot export can silently return only the first batch of purchase orders and look complete when it is not.
  • Supplier names, costs, and locations are split across PO-level and line-item fields, and merchants want them lined up in one flat sheet for reconciliation.
  • Teams want a browser-only way to rescue this data without wiring up API credentials, a script, or a third-party connector they would have to trust with their store token.

Workflow

How to use the cleaned CSV

  1. In Stocky, or via the Stocky purchase-orders API (GET /api/v2/purchase_orders.json), export your purchase orders to a JSON file yourself — this tool deliberately does not call the API, authenticate, or ask for your store name and token.
  2. When you pull from the API, page through with since_id (or limit and offset) until you have every purchase order, then save the combined response as one .json file so the export is complete.
  3. Drop or paste that JSON file here. It is parsed entirely in your browser with the File API and is never uploaded to a server.
  4. Review the findings: lines where received quantity is missing or less than ordered, line items missing a SKU, cost, or ordered quantity, and any warning that the export looks paginated or truncated.
  5. Export the Shopify-shaped purchase-order and transfer review CSV, open it in a spreadsheet, and reconcile it against Shopify before you recreate any purchase orders or transfers by hand.
  6. Keep the exported CSV as your permanent off-Stocky archive of purchase-order and receiving history.

Auto-fix policy

What the export can safely change

  • Flattens the nested Stocky JSON into one CSV row per purchase_items line item, carrying down PO number, supplier, receive location, and status.
  • Reads PO and line-item fields through tolerant key aliases (number or po_number, supplier_name or vendor, purchase_items or line_items, quantity or ordered_quantity, received_at, cost_price or supplier_cost_price), so common export variants still map cleanly.
  • Derives a received quantity from an explicit field when present and otherwise infers the receipt state from received_at and item status, marking partial or unconfirmed receipts in a review note instead of guessing a number.
  • Flags a likely-incomplete export when the JSON carries a pagination hint or when the purchase-order count looks like a round, limit-sized batch, so you can page through and re-export.
  • Writes a Shopify-shaped review CSV with stable columns — PO number, supplier, SKU, title, ordered qty, received qty, cost, location, status, a review note, and a source index — quoted safely for spreadsheets, with nothing sent to Shopify or Stocky.

CSV example

CSV example: Stocky PO JSON to Shopify review CSV

One Stocky purchase_items line becomes one Shopify-shaped review row. Because received_at is null and status is "not delivered", the tool reports 0 received and a review note instead of assuming the order arrived, so you reconcile it by hand before the Stocky sunset.

Before
{ "purchase_orders": [ { "number": "PO-1042", "supplier_name": "Acme Supply", "shopify_receive_location_id": 7654, "archived": false, "purchase_items": [ { "sku": "WIDGET-BLK-M", "product_title": "Widget", "variant_title": "Black / M", "quantity": 50, "received_at": null, "status": "not delivered", "cost_price": "4.20" } ] } ] }
After
PO Number,Supplier,SKU,Title,Ordered Qty,Received Qty,Cost,Location,Status,Review Note,Source Index
PO-1042,Acme Supply,WIDGET-BLK-M,Widget Black / M,50,0,4.20,7654,not delivered,Receipt not confirmed (received_at empty); verify before recreating,1

FAQ

Shopify CSV questions

Does this tool connect to Stocky or my Shopify store?

No. It never calls the Stocky API, never authenticates, never asks for your store name, token, or any login, never stores credentials, and never contacts Shopify. You export the purchase-orders JSON from Stocky yourself, and this tool only parses that file locally in your browser. Nothing is uploaded.

Why should I do this before the Stocky sunset?

Stocky is being sunset, and its purchase-order and receiving history is not automatically migrated into Shopify, so once the app is gone that data is hard to recover. Exporting your JSON now and converting it to a CSV gives you a permanent, readable archive you fully control. The tool only reads the file you provide; it does not extend Stocky access.

Where does the received quantity come from if Stocky has no such field?

Per the public Stocky v2 API docs, Stocky records receipts with a received_at date and an item status rather than a single received-quantity number. The tool uses an explicit received-quantity field if your export happens to include one, and otherwise infers whether a line was received from received_at and status. Anything partial or unconfirmed is flagged in a review note so you can verify it manually.

Will this tool import the purchase orders back into Shopify?

No. The output is a review worksheet for manual reconciliation, not an import. It does not push anything to Shopify, does not call any API, and does not recreate purchase orders or transfers for you. You decide what to do with the CSV in a spreadsheet first.

My export only returned some of my purchase orders — will the tool notice?

It tries to. The Stocky list endpoint pages with limit, offset, and since_id, so a single request can return only the first batch. If the JSON carries a pagination hint, or if the purchase-order count looks like a round limit-sized page, the tool raises a notice that the export may be incomplete so you can page through and re-export. It cannot fetch the missing pages for you.

What JSON shapes does it accept?

It is tolerant. It accepts a top-level array of purchase orders, an object wrapper such as { "purchase_orders": [...] } (Stocky's own envelope) or { data | results | orders: [...] }, or a single purchase-order object. Line items are read from purchase_items, line_items, items, or products. If the JSON cannot be parsed, it tells you instead of failing silently.

Related tools

Feedback

How is this tool working for you?

Found a bug, a false alarm, or a missing check? Tell me — a human reads every note.