The message arrives while I'm already pushing the cart: "milk, the good bread, 2x eggs, something for the cat, and paper towels if they're on offer". A perfectly good shopping list, in the wrong app. For a while my routine was to hold the phone in one hand, WhatsApp on the left half of my brain, Listo on the right, and retype seven items with my thumb. I build the list app. Retyping felt like a confession.
So Listo now does the obvious thing: any text can become a list. Share a message to Listo from another app, or copy anything and paste it into Import from text in the menu. The app splits it into items, reads the quantities, and shows you a checklist to approve before it touches your lists. (It won't strip "if they're on offer" from the paper towels — that's what the review screen is for.)
What it can read
I wanted this to work on the messy stuff, not just tidy notes, so the parser was trained on the kind of text people actually send each other:
- Chat messages — one line with commas ("milk, bread, 2x eggs") or one item per line.
- Notes and bullets — dashes, asterisks, dots, numbered lines. The bullets go, the items stay.
- Checklists — a ticked box like "[x] Milk" comes in already marked as bought, so an old list keeps its history.
- Quantities in whatever shape — "2x Milk", "Milk x2", "500 g sugar", "Milk 2 kg", "1.5 l water". Units get normalized: "kilo" becomes kg, "gr" becomes g, "liter" becomes L.
- Recipe ingredient blocks — copy the ingredients from a recipe page, paste, and the twelve lines become twelve items. Metric amounts (grams, kilos, litres) come through as quantities; "2 cups flour" keeps its cups in the name, which is fine for a shop.
- Listo's own shared lists — when someone shares a list from Listo as text, you can paste it straight back in: title, quantities, bought marks, everything survives the round trip.
Duplicates merge and their quantities add up, which matters more than it sounds: "eggs" at the top of the message and "2x eggs" at the bottom becomes one line with three eggs, not two lines and an argument in aisle four.
The part I'm proud of: it knows how you write
Detecting items is the easy half. The half that took the longest is what happens next. Before the checklist appears, every item is matched against everything you have ever bought in Listo. If you've always written "Greek yogurt" and the message says "greek yoghurt", you get your spelling. If you always buy milk in "cartons", a bare "milk" arrives with cartons as its label. A typo in the message gets forgiven the same way. And a count hiding inside the name — in Romanian I can paste "doua cutii lapte", two boxes of milk — comes out as Lapte, quantity 2.
This is the same history brain that powers voice input, pointed at typed text instead of speech. One deliberate difference: when you typed a quantity yourself, it wins. History only fills the gaps, it never overrules a keystroke.
Approve first, then it's a list
You always land on a review screen before anything is saved. Untick the item that was actually a joke, fix a name, and choose where it goes: a new list (Listo suggests a title when the text had one) or an existing list, where the items slot into their category groups next to what's already there. Then create or add. One tap, and the message you'd have retyped is a list you can share back with whoever sent it.
Honest print
On Android, Listo shows up in the share sheet of any app that can share text, so WhatsApp, Keep, Notes, your browser and your email all work directly. On iPhone, the share sheet entry is still on my list — for now, copy the text and use Import from text from the menu, which is two taps more and otherwise identical. Photos of handwritten lists are not text; that's what receipt scanning is for, and I'd like to point it at whiteboards one day. And the history matching is only as good as your history: on a fresh install it has nothing to match against, so the first few imports are plain, and they get smarter as you shop.
Try it
- Find any list-shaped text: a message from home, the ingredients under tonight's recipe, an old note.
- On Android, share it to Listo. On iPhone, copy it and open Import from text from the menu, then paste.
- Review the detected items, untick what you don't need, and add them to a new or existing list.
If you paste something it can't make sense of, send me the text (with the embarrassing parts removed) at support@rolisto.com. I read every message, and half of Listo's best behavior started as one of them.
— Andrei