Migrating from Stocky to Bookkeep Inventory
Bookkeep Inventory is a direct replacement for Stocky. When you migrate, your core Stocky account components - suppliers, purchase orders, receiving history - import automatically into Bookkeep.
TL;DR - The most important explainer in this guide is seeding your opening costs. If nothing else, read that step. Setting costs is crucial for using Bookkeep Inventory.
Feature Migration
| Feature | What Gets Migrated |
|---|---|
| Suppliers | Contact info, notes (editable in Bookkeep after migration) |
| Purchase order history | Stocky POs inclusive to line items import as static records |
| Receiving history | What was received against each PO |
| Supplier cost rollup | One record per variant per supplier -> last cost, avg cost, receipt count, and total units calculated from Stocky POs |
| Supplier catalog prices | Optional, from the variant cost CSV in step 4 |
Data Migration
| Data Element | Derived from |
|---|---|
last_cost / last_cost_at | cost_price of latest-dated delivered items |
receipt_count | Count of delivered lines |
total_units | Sum of quantities |
avg_cost | total_spend / total_units, quantity-weighted across delivered items |
Caveats on the migration:
- You must set your own opening costs. The API import gives you history and pricing. It does not set weighted average cost. Do that in seeding your opening costs
- Stocky Orders are information only. Imported POs are records of what you ordered in Stocky. They cannot be received against in Bookkeep. If you need to do that, press Duplicate then use the Bookkeep clone of the PO.
Shopify is your source of truth
Bookkeep is designed as a smart extension to Shopify -- not a replacement. Stocky was an internal product within Shopify; now that it's gone, certain workflows should be done in Shopify directly:
-
Inventory counts and stocktakes
-
Stock transfers between locations
-
Checking stock levels and accepting transfers on POS
Vendors and suppliers
- Vendor — who makes the product. It's a name carried on the product, not a record you manage.
- Supplier — who you buy it from. One product may be available from multiple Suppliers.
Suppliers are a primary concept in Bookkeep. Every Purchase Order you create must designate a Supplier from which you are ordering. Contact details, purchase order history, and supplier cost history all tie to supplier records.
Because Stocky was looser about Supplier definition, you might see a Supplier record appear twice in Bookkeep after your migration. This happens due to a product defect within Stocky, whereby POs were linked by both `ID` and `name`.
Ensure your Supplier naming is consistent in Stocky before you import to avoid duplicate records appearing in Bookkeep. The match is exact and case-sensitive, so Agron and agron become two suppliers.
Okay, let me migrate already!
Step 1: Paste your Stocky API key
- In Stocky, open API key access in your settings and copy the key.
- In Bookkeep, go to Purchase Orders → Settings → General.
- Paste the key into Stocky API key and save.
Step 2: Run the import
Go to Purchase Orders → Settings → Stocky Import and click Run import. Four steps run in order, each building on the one before it. If a step fails, the rest are skipped and the import is marked failed.
- Suppliers. Pulls every supplier from Stocky. Existing records are updated, new ones added. Two suppliers sharing a name get a suffix so they stay distinct.
- Purchase orders. Pulls your full PO history with line items. Records are written only where something changed, and a raw copy of the Stocky response is archived for audit.
- Vendor supplier link. Matches vendor names to supplier records, as described above.
- Supplier cost records. Walks every delivered PO line item and writes the supplier cost onto the matching product variant. Line items whose product has not synced into Bookkeep yet are skipped and counted separately.
Run it as often as you like. Every step upserts, so nothing duplicates, and a re-run picks up whatever changed in Stocky since the last one. A store with roughly 1,000 POs and 8,000 line items finishes in under a minute.
Step 3: Read the results
Every step reports counters. Two rules tell you at a glance whether the numbers hang together: Created plus Updated plus Skipped or Unchanged should equal the total fetched, and Variants Found plus Skipped No Variant should equal Total Inventory Items.
| Step | Counters | What to look for |
|---|---|---|
| Suppliers | Pages, Fetched, Created, Updated, Skipped | Skipped means the record was unusable, usually a missing ID. On a repeat import, Updated equals Fetched and Created is zero. |
| Purchase orders | PO Count, POs Created / Updated / Unchanged, and the same four counts for line items | Unchanged means the record already matched Stocky exactly and nothing was written. Everything is Created on the first run and mostly Unchanged after that. |
| Vendor supplier link | Vendors Linked, Vendors Created | Linked counts POs connected to a supplier. Created counts new suppliers made for unmatched vendor names, and drops to zero once your naming is consistent. |
| Supplier cost records | Total Inventory Items, Variants Found, Created, Updated, Unchanged, Skipped No Variant, Errors | Skipped No Variant means the product has not synced into Bookkeep. Sync it and re-run. Errors should be zero. |
Step 4: Seed your opening costs
Skip this step and your weighted average cost begins at your first Bookkeep receipt, discarding every dollar of cost history before it. How Weighted Average Cost Works explains why.
The opening cost comes from a Stocky variant report, exported as CSV. Run step 2 first: the CSV matches supplier names against existing supplier records and does not create suppliers.
Export from Stocky
- Open the Variant Report at
https://stocky.shopifyapps.com/reports/variants. - Select these three columns, all required: Supplier, Shopify ID, Average Cost.
- Add Cost Price if you also want supplier catalog prices imported.
- Click Export CSV. Any other columns you leave selected are ignored.
Bookmark the report URL with your columns already chosen and the next export is one click.
Import into Bookkeep
Upload the file in the variant cost section of Purchase Orders → Settings → Stocky Import.
Each row can write two things: a cost baseline on the variant's ledger, recorded as a seed event, and a supplier catalog price where the row has a Cost Price and its supplier name matches a record.
Three properties of the seed are what make the timing forgiving:
- It uses cost only. The stock column is ignored. Quantity is resolved at your first receipt, against the live on-hand count at that moment.
- The export date does not matter. With no quantity to go stale, a CSV exported weeks ago imports the same as one exported today.
- It backdates. If a variant already has Bookkeep receipts, the seed is written before the earliest one and the ledger recalculates. Nothing has to freeze while you migrate.
Importing costs changes nothing in Shopify. The seed sits in Bookkeep until receiving puts it to work.
| Counter | What it means |
|---|---|
| Total Rows | Rows processed. Every other counter sums to this. |
| Seeded | Variants with no prior cost history, given a baseline. |
| Seeded (Backdated) | Variants that already had receipts. The baseline was applied retroactively and the ledger recalculated. |
| Skipped No Variant | The Shopify ID matched nothing. Sync the product, then re-run. |
| Skipped No Cost | Average Cost was blank or zero. |
| Skipped No Inventory Item ID | The matched variant has no inventory item ID configured. |
| Skipped Already Seeded | The variant already has an opening seed. Only one is allowed per variant. |
| Errors | Unexpected failures. Should be zero. |
Re-running is safe. Already-seeded variants are counted and left alone.
Step 5: Set your cost method and fees
Two settings decide what Bookkeep pushes to Shopify's cost per item:
- Cost method — last cost received, or weighted average cost. See Choose Your Cost Tracking Method.
- Landed cost fees — shipping, duties, and discounts, and how each spreads across a receipt. See Configure Fees and Discounts.
Set both before your first receipt. Allocation method deserves a minute of thought, because splitting freight evenly across a $100 item and a $1 item distorts both: see what allocation does to your numbers.
Step 6: Run your first live purchase order
- Open an imported Stocky PO and click Duplicate. You get a real Bookkeep PO you can edit and receive.
- If the Stocky original is still open, cancel it in Stocky so Shopify does not count the incoming quantity twice.
- Order it, then click Receive when the stock arrives. Partial receipts are fine, so you can receive 3 units now and the rest later.
- Enter the invoice number, the quantity received per line, any rejected quantity and reason, and any landed cost fees.
- Save. Bookkeep recalculates cost and syncs it to Shopify.
If a receipt was entered wrong, nothing is erased. See Fix a Receipt: Voids and Cost Corrections.
How can I accomplish my Stocky in Bookkeep?
| In Stocky | In Bookkeep |
|---|---|
| Create a purchase order | Build a new PO, or Duplicate an imported one |
| Supplier cost price lists | Supplier catalog price per variant, on the supplier record |
| Receive a purchase order | Receive on the PO, or use the Receive Inventory tile in Shopify POS |
| Receive against a paper invoice | A receipt with its invoice number and fees and discounts |
| Damaged or short shipment | Rejected quantity with a reason, on the receipt line |
| Average unit cost | Weighted average cost, from a replayable cost ledger |
| Email a purchase order to a supplier | Send it from the PO |
| Print purchase orders and barcode labels | PDF and CSV export from the PO; labels print during receiving |
| Enter the supplier bill in QuickBooks | Push the receipt as a bill |
| Stocktakes, transfers, POS stock lookups | Shopify's native inventory tools |
Troubleshooting
The import failed. A failed step stops every step after it, but the ones that already finished are kept. Re-run the import and it picks up where it stopped.
Authorization error. Almost always a wrong or expired Stocky API key. Copy it from Stocky again and save it in Settings → General.
Network errors. Connection resets and timeouts retry three times before the step is marked failed.
Errors during the cost step. Individual items that fail are logged and skipped so the rest continue. The Errors counter tells you how many were affected.
Variants skipped. The product has not synced from Shopify into Bookkeep yet. Once it has, re-run the import.
Frequently asked questions
Can I keep using Stocky while I migrate? Yes, and you should until you cut over. Re-run the import to pick up anything new.
Why do I have two suppliers for the same company? Stocky tracked it under both a supplier ID and a vendor name. See Vendor and supplier are different things.
Do I need to export the variant CSV the same day I import it? No. Only average cost is used, so nothing in the file goes stale.
What if I already started receiving in Bookkeep before loading the CSV? Load it anyway. The seed backdates and the ledger recalculates as if the opening cost had been there all along. This corrects your cost records in Bookkeep; it does not retroactively change Shopify.
What happens to rows whose supplier I have not imported? The cost baseline is still seeded. Only the supplier catalog price is skipped for that row.
Why doesn't my WAC match the average of my purchase prices? WAC is weighted by quantity and uses landed cost, not the price on the PO line. A receipt of 10 units at $3.00 with a $1.00 per unit discount contributes $2.00 per unit.
Can I receive an imported Stocky purchase order? No. Duplicate it first.
How long does it take? Under a minute for a typical store, for both imports.
Notes
- Forecasting and suggested order quantities are in beta. The window a supplier is forecast over is the Forecast suggestion period (days) field on the supplier record.
- Reporting is in flight. Stocky's report catalog — ABC analysis, average unit cost, profit, supplier reports — has no in-app equivalent yet. For now you pull your data out through the Bookkeep API using a scoped key created under Inventory settings → API keys. A built-in reporting suite is coming.
- Barcode labels print during receiving through a Shopify App Store label app. We recommend CTS Multi Barcode Labels.
- QuickBooks bill push is in beta and enabled per customer. Ask us to turn it on.