FIFO Pick Evidence
Small 3PL warehouses can turn a pick-log CSV into a portable FIFO exception report before a customer audit. Drop in a log and see which picks left an older lot waiting, and which rows are missing or have an ill-formed timestamp — entirely in your browser.
Drag a pick-log CSV here, or
— or paste its contents below —
Don't have one handy? — a small pick log with one deliberate FIFO exception, so you can see the report shape before using your own.
What this is and isn't
- Everything runs in your browser. The pick log and report are never uploaded — there is no server here to send them to.
-
The CSV needs
order_id,sku,lot,received_at, andpicked_atcolumns, with ISO 8601 timestamps that include a timezone. - A report is an observation of the supplied rows, not an audit conclusion, compliance determination, or chain-of-custody record. Confirm your warehouse system's own semantics and investigate each observation.
- Only anonymous, aggregate usage counts (for example "a report was generated") may be recorded locally — never the pick-log contents, order IDs, or SKUs.
This tool vs. a full WMS
A full warehouse-management platform such as Extensiv 3PL Warehouse Manager runs FIFO or lot-order visibility on top of a whole 3PL operation's client, billing, and inventory records. This tool checks one exported pick log instead — no account, no client setup, nothing uploaded. See FIFO Pick Evidence vs. Extensiv for which one answers your question.
Common questions
What counts as a FIFO exception?
A row is flagged when, for the same SKU, an order that arrived earlier was still picked after the order in that row — meaning the newer lot moved out first while older inventory of the same SKU sat waiting. The report names both the row and the older row it was picked ahead of, so you can check the physical pick against the log. See a worked example for the exact rows that do and do not get flagged.
Why does a row show "invalid timestamp" instead of a time?
received_at and picked_at must be ISO 8601 with an explicit timezone, such as a trailing Z or a +00:00 offset. A bare local timestamp with no zone is reported as invalid rather than guessed at, because guessing a timezone would guess the very ordering this report exists to check.
Is my pick log uploaded anywhere?
No. Parsing happens with JavaScript running in your own browser tab. This page makes no network request with your file's contents — there is nothing to intercept because nothing is sent. Only anonymous, aggregate usage counts like "a report was generated" may be recorded locally, with an opt-out below.
Is there a command-line version?
Yes — the same check ships as a local Python CLI (fifo_pick_evidence.py) in this tool's repository, for scheduled runs or CI. See the README for its usage.