Receipt capture: forward parsed grocery receipts to Crossbill #142

Open
opened 2026-05-17 12:13:01 -07:00 by pyr0ball · 0 comments
Owner

Summary

When a user scans a grocery receipt in Kiwi, the parsed receipt data (line items, totals, merchant, date) should optionally be forwarded to Crossbill for expense tracking. This closes a natural loop: the same scan that stocks the pantry can also log the grocery spend.

User flow

  1. User scans receipt → Kiwi parses it → pantry items added as usual
  2. If user has Crossbill configured (or is running both locally), a prompt appears: "Send this receipt to Crossbill?"
  3. On confirm, Kiwi POSTs the receipt payload to Crossbill's ingest endpoint

Data shape to send

{
  "source": "kiwi_receipt_scan",
  "merchant": "Whole Foods Market",
  "date": "2026-05-17",
  "total": 47.83,
  "currency": "USD",
  "line_items": [
    {"description": "Organic Chicken Thighs", "qty": 1, "unit_price": 12.99, "amount": 12.99},
    {"description": "Greek Yogurt 32oz", "qty": 2, "unit_price": 5.49, "amount": 10.98}
  ],
  "raw_ocr": "..."
}

Configuration

CROSSBILL_URL env var (optional). When unset, the forward option is hidden. No tier gate needed — this is a cross-product integration, free for any user running both.

Notes

  • Crossbill side tracked in crossbill#
  • The OCR pipeline already extracts line items for pantry matching — reuse that parsed output, no second OCR pass
  • Forward should be fire-and-forget with a non-blocking POST (timeout ~3s, log failure silently)
  • Post-launch backlog — implement after Crossbill ships its receipt ingest endpoint
## Summary When a user scans a grocery receipt in Kiwi, the parsed receipt data (line items, totals, merchant, date) should optionally be forwarded to Crossbill for expense tracking. This closes a natural loop: the same scan that stocks the pantry can also log the grocery spend. ## User flow 1. User scans receipt → Kiwi parses it → pantry items added as usual 2. If user has Crossbill configured (or is running both locally), a prompt appears: "Send this receipt to Crossbill?" 3. On confirm, Kiwi POSTs the receipt payload to Crossbill's ingest endpoint ## Data shape to send ```json { "source": "kiwi_receipt_scan", "merchant": "Whole Foods Market", "date": "2026-05-17", "total": 47.83, "currency": "USD", "line_items": [ {"description": "Organic Chicken Thighs", "qty": 1, "unit_price": 12.99, "amount": 12.99}, {"description": "Greek Yogurt 32oz", "qty": 2, "unit_price": 5.49, "amount": 10.98} ], "raw_ocr": "..." } ``` ## Configuration `CROSSBILL_URL` env var (optional). When unset, the forward option is hidden. No tier gate needed — this is a cross-product integration, free for any user running both. ## Notes - Crossbill side tracked in crossbill#<TBD> - The OCR pipeline already extracts line items for pantry matching — reuse that parsed output, no second OCR pass - Forward should be fire-and-forget with a non-blocking POST (timeout ~3s, log failure silently) - Post-launch backlog — implement after Crossbill ships its receipt ingest endpoint
pyr0ball added the
enhancement
backlog
labels 2026-06-01 12:11:31 -07:00
pyr0ball added this to the Post-Launch milestone 2026-06-01 12:11:31 -07:00
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference: Circuit-Forge/kiwi#142
No description provided.