Receipts
A barcode or a photo is one thing at a time. A receipt is a whole haul: what you bought, where, when, and what it cost. Cobblr reads one into a purchase and a set of inbox lines you confirm like any other scan.
The loop:
- Get the receipt in: the Receipt button, the camera pointed at the paper, a forwarded email, or a standing inbound address.
- It lands in your inbox as its own
Receipt · <store>session, and the purchase is recorded straight away. - Check the lines. Cobblr has already checked them against the total.
- File the session in one phrase, and the lines become things you own.
Four ways one gets in
- The Receipt button on the scan page. Pick a CSV, a PDF, or a photo of one.
- The camera scanner, pointed at the paper. Nothing extra to press. One
inbox line per item under a
Receipt · <store>session, plus the purchase. - Forwarding it by email to the
receipts+…@address on the scan page (tap Copy). Works even when the receipt is the email body with nothing attached. You always get a reply saying what landed. - A standing inbound address that vendors and systems send to on their own, so order confirmations and shipping notices arrive as confirm-ready rows.
- A mail rule that forwards a store's emails is all the setup a shop needs.
In Gmail: Settings, Filters, a filter for
from:(amazon.com) subject:(shipped OR arriving OR delivered OR ordered), action "Forward to" the receipt address. Gmail then sends a confirmation to that address, which Cobblr relays back to your own inbox to click. A store's "Shipped", "Arriving today" and "Delivered" emails are read as the tracking events they are and matched to their order, so a delivery is a card in your DMs within seconds of the store's email. A shipping notice that arrives before its order confirmation opens the parcel on its own. AddOR "return request" OR "dropoff confirmed" OR "refund issued" OR cancelledto the subject list and returns and cancellations follow the same way. - Or connect your Gmail once, and nothing is forwarded at all. Under Your account → Connections, Add a connection → Gmail, pick the workspace, Connect Gmail. Cobblr asks Google for read-only access and reads mail from stores and carriers only (Amazon, UPS, FedEx, USPS, DHL, OnTrac, and any store you add on the card), the last 7 days first and then as it arrives. No message body is kept, nothing is labelled or sent, a mailbox feeds one workspace, and Disconnect on the card revokes the grant at Google. Check now reads it on demand, and a grant that has died shows "stopped: reconnect" with one card to do it from. A self-host operator sets up the Google client first, and the connection does not appear until then.
- Both email doors need an admin or the operator to set them up. Until then they do not appear.
How the camera and email doors behave at the edges
Camera: the pass that normally identifies a product reports when it is looking at a receipt, and the picture goes to the same reader a PDF does, so you get a line per item rather than one item named after whatever text was legible. It is deliberately hard to trigger by accident. A photo that was identified as a product is never treated as a receipt, however much its packaging mentions invoices, and a dark or unreadable frame is treated as a bad photo. A recognised receipt whose lines cannot be read stays in your inbox with a note saying so.
Email: Cobblr reads the body and its HTML, splits an item list into rows, and saves anything it cannot split as a single note to sort. The reply says how many items imported, that it was already imported, that it was saved as one note, or that no receipt was found. The receipt is stored the moment it arrives, so a hiccup during processing never loses it.
How it is read
- Most receipts need no AI. A CSV or a ruled table parses directly, and a plain till receipt is read line by line for free. A photo is read off the picture first, and when the text has the shape of a receipt (lines ending in prices and a total) it goes straight to the reader with no AI asked. Only when the lines do not add up does it fall through to an AI read. A photo that does go to the AI is asked outright whether it is a receipt, so one with a big product on it is no longer filed as that product.
- A line sold by weight is recorded by weight. "4.14 lb at 1.99/lb" keeps the weight, the unit and the price per unit, and counts as one package rather than being rounded into four. The card shows the weight in place of the quantity control, and if the table you file into has a weight field, the weight lands there.
- The lines are checked against the total. Cobblr compares what it read to what you paid and tells you when they disagree, which stops a confident wrong price.
- A coupon comes off the line it discounts, never dropped or made a row of its own. The line keeps its rung-up price and records what came off, so two coupons on a 2-for-0.49 pair of croissants leave them costing nothing and the items add up to what you paid. No row to triage for something nobody owns.
- A product number printed beside a line is kept, so the line resolves to a real catalog name and picture instead of the till's abbreviation. Nothing is invented for a receipt with no codes.
- A model number printed beside a line ("Model #: GA605WI-XS96") is recorded on the item exactly as printed, on a receipt or an order email.
The session in your inbox
Each receipt is its own labelled session, so a whole haul reads and triages as one thing instead of scattering into whatever else you were scanning.
- Name, number, date and item count sit together on the left as one phrase. The date is the one printed on the receipt, not the upload date.
- Tap the number to edit it where you read it. A session with no number offers to add one in the same spot.
- The chevron folds the session. Tapping the name does not, because reading a title and hiding it should not be the same gesture.
- Original opens the source full screen (PDF, photo, or email), with what the receipt said it cost above the document: subtotal, savings, tax, shipping and total. Only what the receipt actually stated appears. A till slip with no tax line shows no tax, and a real zero is kept, because tax-free is worth saying. Click the dark area around it to close.
- The receipt's date and shop do not repeat on every line. The session header already says when and where, so a line's Bought on and Acquired from chips are dropped from the card's glance when they match. Both are still saved on the item and show under All fields.
- Re-parse reads it again and replaces the still-pending lines, for a weak first read or after you turn on AI.
- A tracked parcel's delivery status sits on the row too, a fact about the session rather than an action.
- When something is arriving shows on the row ("arriving tomorrow", "arriving Friday"), read from the receipt's own estimate. The earliest date wins when an order ships in parts. A passed estimate reads "was due", because an estimate is not a delivery.
- Duplicates are caught. Same store and same order number as one already imported, and Cobblr says so and offers Import anyway. A receipt with no order number is never treated as a duplicate.
It becomes a purchase order straight away
- The purchase is recorded the moment the receipt is read, with every line on the order immediately, not once you triage.
- A line becomes an item you own only when you confirm it. Plenty on a receipt gets used up rather than kept: the purchase is what you spent, and the inbox lines are the question of what you want to track.
- Filing a line claims the order line the receipt already has, and sending it back releases it, so the order always says what the receipt said and a line is never on it twice. There is no separate "confirm as purchase order" step any more, because there was nothing left for it to confirm.
- Deleting a receipt you never filed from removes its order too, so a better picture can make a fresh one. Discarding the whole receipt cancels the order it created.
- Undoing a scan you added to something takes back the purchase it recorded, rather than writing a correction beside it, so what Cobblr learned about how often you buy the thing is exactly what it was before.
Turning lines into things you own
- Lines look for their own picture, searching the shop the receipt came from, so a "Croissant" off a supermarket receipt looks for that supermarket's croissant. Each line shows its shop under its name.
- Till abbreviations match what you already track. "SHRD MOZZ 8Z" matches "Shredded Mozzarella" and offers to add to it instead of creating a second part every shopping trip.
- Filing the whole session is one phrase. "Place and file all 3 as Mugs" when it still has to ask where, "File all 11 as Figurine" when it knows. Into only ever means a place, and as only ever means a category.
- A table you do not have yet installs from the same destination pill every other item uses, not from a second button beside it.
What a confirmed receipt fills in
- Fields marked acquired from, acquired on or acquired for get where you bought it, when, and what it cost after any discount. Matching is on what a field means, not its name, so "Acquired from", "Source" and "Bought from" all work.
- A forwarded receipt keeps the whole purchase, not just the items: who sold it, what it cost after discount, and when it is due to arrive.
- On a marketplace the shop and the seller are separate facts, because you shop at the one again and probably never deal with the other twice. Where the receipt names both, the item's own line says both ("from eBay · sold by detroitaxle").
- Where it came from is checked against the receipt. When Acquired from says one place and the receipt says another (a marketplace name on an order from a different one), the card says so where Add would be and holds the item rather than quietly picking a side. Spellings of one place count as one place, the seller named on an order is never a contradiction of the marketplace it sold on, and "Gift" or "Bought used" are never flagged. One tap takes the receipt's word as your own answer, a re-run never overwrites what you typed, and filing a flagged item writes the receipt's source.
- Groceries records the day you bought it in its own Bought on date, read from the receipt, so shelf life counts from the purchase even if you scan the receipt a week later. With Provenance switched on too you get one date field rather than two, because they deliberately share a name.
Filling in where things came from
Turning a set of fields on (Provenance: acquired from, on, and for) gives your next scans somewhere to land. Things you filed earlier already had their receipts read, and everything those receipts said was kept, so the answers can move across.
-
Ask Cobb to "fill in where my things came from", or call it directly as an owner or admin:
POST /api/v1/orgs/<slug>/modules/core-scan/receipts/backfill-fields?dry_run=true -
Read the dry run. It reports how many items it looked at, how many it would fill, how many already had answers, and how many never came from a receipt, and it writes nothing.
-
Run it again without
dry_runto fill them.
- Only an empty field is filled. "A gift from Mum" typed into Acquired from is never overwritten by a receipt that disagrees.
Filing paperwork behind something you already have
Two doors run in opposite directions.
- The upload button at the top of the inbox is an intake: the receipt arrives first and its lines become your items.
- The camera button on a scan card is the reverse: the item exists and you are filing paperwork behind it. Choose a PDF or CSV there and Cobblr reads it into a purchase, records every line, links the item to that purchase, and puts nothing new in your inbox.
- The other lines are recorded, not owned. The item's card says "This receipt lists 4 other items" and opens to list them with quantities and prices. Nothing there becomes an item unless you say so.
- The link survives a re-run of the AI. Which receipt something was bought on is a fact about the purchase, not a guess a model made.
Following the parcel
A receipt with a tracking number is followed while it is still in your inbox, so you are told when it arrives without having triaged it first. See Parcels.