The warehouse system built for 3PLs.
Receive, store, pick, ship and bill for every customer you serve, with scanning on the floor and a portal your customers will actually use.
Now onboarding our first warehouses.
From the dock door to the invoice
Everything a 3PL warehouse does in a day, in the order the goods move.
Receiving
Scan in against the order. Good or damaged, lots and expiry, over and short receipts.
Putaway
Aisle, bay, shelf and bin locations with printable QR labels. Staging until it's shelved.
Picking
Shelfie builds the pick list, earliest expiry first. Stock can't go negative.
Shipping
Ship from the dock on a phone or at the desk, with BOL and tracking numbers and a printed bill of lading.
Inventory
Every customer's stock by location, low-stock alerts and the full movement history.
Billing
Storage and handling charges itemised from that history, with invoice PDFs.
Customer portal
Customers see their stock, place orders, read invoices and message you.
API and webhooks
Integration tokens, a published API and signed event notifications.
On the floor
Scan-first, on the phone in their pocket.
Open Shelfie on a phone and it becomes the floor app: receive, put away, pick and ship, with every scan checked against the order.
- Receive against the order: good or damaged, lot and expiry, over and short
- Pick lists built for you, earliest expiry first, with the bin to go to
- Put away to a bin now, or leave it in staging until there's time
- Scan any product or bin to see what's where, and what's due today
In the office
Every customer's stock, and the bill that goes with it.
See inventory by location for every customer you store, with one history of every movement. Billing reads that history, so storage and handling charges add up on their own.
- Low-stock alerts against each product's reorder point
- Storage, receiving, picking and shipment fees itemised per customer
- Invoice PDFs, and a CSV export for your accounting system
For your customers
A portal your customers will actually use.
Each customer signs in to see their own stock, orders and invoices, and nothing else. They send in orders and message your team without an email chain.
- Live stock, and every receipt, pick and shipment as it happens
- Inbound and outbound order requests, and their product catalogue with CSV upload
- Their own users, with admin, manager and user roles
For your developers
An API and webhooks, not an export button.
Give each system its own token with its own role. Shelfie publishes its API reference and tells your systems when things happen, so nobody has to poll.
- A token per integration; revoke one without touching the rest
- Safe retries with
Idempotency-Key, and clear rate limits - Signed webhooks for receipts, picks, shipments and low stock
# Verify a delivery before trusting it
def verify(secret, header, body):
parts = [p.split("=", 1) for p in header.split(",")]
t = next(v for k, v in parts if k == "t")
if abs(time.time() - int(t)) > 300: # refuse replays
return False
want = hmac.new(secret.encode(),
t.encode() + b"." + body,
hashlib.sha256).hexdigest()
return any(hmac.compare_digest(want, v)
for k, v in parts if k == "v1")
Built so the numbers hold up
One history
Every stock change writes one ledger row in the same transaction. Inventory and billing read the same record.
No negative stock
Picks are guarded in the database. Two pickers can't take the same last carton.
Roles enforced on the server
Staff and customer roles are checked on the server against the live account, so removing someone's access takes effect at once.
Each customer sees only their own
Every query is scoped to your company, and the portal to the customer signed in.
Signed and hashed
Webhooks carry an HMAC signature. Integration tokens are stored hashed, never in plain text.
See it with your warehouse in mind
Pricing is set per warehouse; we'll walk you through it on the demo.
Try Shelfie with your own products and locations. No card needed.
Start free trial