Import warehouse receipts from a spreadsheet
The seven-step Import Warehouse Receipts wizard — Received versus Expected (pre-alert) mode, owner matching, auto-created products, and the confirm-arrival reconciliation grid.
Import Warehouse Receipts — reached from Import on the Receipts header — creates many receipts at once from one spreadsheet. Rows that share the same Receipt Number become one receipt with several cargo lines.
The stepper has seven steps — Select type, Upload file, Map fields, Validate references, Preview, Create, Done.
1. Select type — Received or Expected
"Are the goods already here?" decides how each receipt is born, and it has a billing consequence:
| Mode | What it creates | Storage billing |
|---|---|---|
| Received (on the dock) | Cargo on hand now — the receipt and its lines are born received and stored | Storage accrues from today |
| Expected (pre-alert / ASN) | Cargo still on its way — the receipt is born pending, its lines marked incoming | No storage billing until the goods arrive |
Use Expected for a pre-alert or ASN a customer sends ahead of the truck: the cargo is on the books and visible on the receipt, and it costs the customer nothing while it is still in transit. When it lands you confirm the real counts — see Confirm arrival.
A Warehouse must be picked here as well; every receipt in the run lands in that warehouse.
2. Upload file
- Download template gives you the exact column names for the mode you picked, plus one example row. Expected mode has one extra column, Expected Pieces.
- Drag and drop a .csv or .xlsx file (Excel
.xlsis accepted too), or click to browse. Only the first sheet is read, row 1 is the header row, blank rows are dropped, and every cell is trimmed — a CSV and an Excel file with the same data import identically. - Limits: 10 MB per file and 500 rows per import; a larger file blocks Next and asks you to split it.
3. Map fields
Columns are auto-mapped by name and can be re-pointed by hand. The fields split by grain:
| Table | Fields |
|---|---|
| Receipt fields (one per receipt) | Receipt Number, Owner, Warehouse, Bin, Shipment Reference, Carrier, Arrival Date, Notes — plus Expected Pieces in Expected mode |
| Cargo line fields (per row) | SKU, Description, Barcode, Serial Number, Lot Number, Expiration Date, Pieces, Package Type, Length / Width / Height, Weight (+ Weight UOM), Volume (+ Volume UOM) |
Receipt Number, Owner, Description and Pieces are required; while any of them is unmapped an amber banner names it and Next stays disabled. A mapping can be saved as a named template and reloaded for the next file.
As with shipping orders, the receipt number in your sheet is kept verbatim as the receipt's
reference — and it is the key Linbis deduplicates on, so re-importing the same file skips the
receipts it already created. The WR receipt number itself is minted by Linbis and can never come
from a spreadsheet.
Expected Pieces is derived when the column is missing
Expected Pieces is the receipt-level total the arrival check later measures against. It is optional: when the column is not mapped (or is blank), Linbis derives it as the sum of the receipt's line pieces — over exactly the lines it is about to create, counting a blank piece cell as 1. A column you map explicitly always wins. A receipt whose lines total zero pieces gets no expected total at all, so no phantom cap is applied later.
4. Validate references
Check references runs a dry run — grouping and lookups only, nothing is written. Findings are grouped by kind, and each kind has its own policy:
| Reference | Policy |
|---|---|
| Owner | Match only, and blocking. An owner that does not match an existing account must be picked by hand before you can continue. Linbis never guesses it and never auto-creates it — the owner is the storage-billing key, so an invented account would bill the wrong customer, or nobody. |
| SKU / product | Auto-created. A SKU that is not in the product catalog yet is shown with a "will create" chip, and the product record is created during the import. This is never an error. |
| Bin | Soft warning. A bin code that does not match a location in the chosen warehouse is reported, but the import still runs — the cargo simply is not slotted to that location. Fix the code in Zones and locations, or put the cargo away afterward. |
| Shipment reference | Soft, match only. An unmatched shipment number leaves the receipt unlinked; no shipment is created. |
For owners you search the account catalog and pick the right record. The pick rewrites that value in every row that uses it, so it resolves on the next Re-check.
5. Preview
Counts the receipts and cargo lines the run will create, how many will be skipped because their receipt number already exists, and how many new products will be auto-created.
6. Create
The import runs as a background job — you can leave the page. The screen polls it and shows created / updated / skipped / failed counts with a per-group result table (worst first), each row carrying its outcome pill, the receipt number, the spreadsheet row numbers, and the reason.
7. Done
- Received mode: the cargo is on hand and storage accrues from today; the panel links to Inventory and back to Receipts.
- Expected mode: the receipts are pending arrival with no storage billing until the goods arrive, and the panel offers Confirm arrival.
Confirm arrival
The reconciliation grid lives on the same route with ?mode=confirm — the Confirm arrival button
on the Done step opens it. Add &receiptId= and a receipt's id to scope it to that one receipt. It
records what actually turned up against what was expected.
One receipt at a time (with a receiptId): every expected line is listed with its expected
pieces, a Received box, a live exact / shortage / overage badge, and a Discrepancy note
field. If the counted total climbs above the receipt's expected total, a red warning appears before
you submit — the server rejects rows over that cap. Lines carrying neither a SKU nor a barcode cannot
be matched: they are greyed out and nothing is written for them. A receipt with no expected lines
shows "Nothing expected on this receipt" and suggests importing it in Received mode instead.
Many receipts from a counts file (no receiptId): pick the warehouse, then upload a CSV or Excel
file with Receipt Number, SKU or Barcode, Received Pieces, and an optional Discrepancy
Note. The columns auto-map and can be re-pointed inline. Rows missing a receipt number, missing both
SKU and barcode, or carrying an unusable piece count are listed under "Unmatched rows — nothing will
be written for these" before you submit. The receipt number may be either the WR number Linbis
minted or the original reference from the pre-alert.
Submitting runs another background job, capped at 500 rows. Each row comes back with one outcome:
| Outcome | Meaning |
|---|---|
| matched exact | The counted pieces equal the expected pieces on that line |
| shortage | Fewer pieces arrived than expected — recorded, with your discrepancy note |
| overage | More pieces arrived than expected — recorded, not rejected |
| unmatched | No expected line on that receipt matched the SKU or barcode — nothing is written; fix the key and resubmit just those rows |
| over cap — rejected | The running total for that receipt would exceed its expected total — nothing is written for the row |
Confirmed lines move from incoming to received, and the receipt re-derives itself from pending to partial to received as the counts land. Storage accrues once the cargo is actually put on hand, so an Expected receipt never bills the customer for the time its cargo spent in transit.
Related
- Warehouse receipts — the list, the statuses, and the receipt detail
- Receive cargo in the warehouse — the interactive single-receipt path
- Quick Receive — barcode intake
- Warehouse storage billing
- Import shipping orders from a spreadsheet