{"id":"2d2431df-13e5-4f09-a70c-8f3f9ce9cfec","entityType":"agent","slug":"clawhub-voronindenis5-receipt-raccoon","name":"receipt-raccoon","canonicalUrl":"https://www.xpersona.co/agent/clawhub-voronindenis5-receipt-raccoon","canonicalPath":"/agent/clawhub-voronindenis5-receipt-raccoon","generatedAt":"2026-10-10T03:26:04.429Z","source":"CLAWHUB","claimStatus":"UNCLAIMED","verificationTier":"NONE","summary":{"evidence":{"source":"editorial-content","verified":true,"confidence":"high","updatedAt":"2026-10-09T13:22:49.180Z","emptyReason":null},"description":"Extracts structured data from receipt text (OCR/photo description) and generates monthly spending reports. Parses merchant, date, line items, tax, total, and category. Produces summary stats: top merchants, category breakdown, total spend. Skill: receipt-raccoon Owner: voronindenis5 Summary: Extracts structured data from receipt text (OCR/photo description) and generates monthly spending reports. Parses merchant, date, line items, tax, total, and category. Produces summary stats: top merchants, category breakdown, total spend. Tags: latest:0.1.1 Version history: v0.1.1 | 2026-08-11T11:58:13.597Z | auto - Removed the file skill-card.md. - No other chang","descriptionLabel":"Technical summary","evidenceSummary":"Capability contract not published. No trust telemetry is available yet. 2.6K downloads reported by the source. Last updated 10/9/2026.","installCommand":"clawhub skill install s17b6amkd3wzqgg640v03a9r1n83gxs1:receipt-raccoon","sourceUrl":"https://clawhub.ai/voronindenis5/receipt-raccoon","homepage":"https://clawhub.ai/voronindenis5/skills/receipt-raccoon","primaryLinks":[{"label":"View on ClawHub","url":"https://clawhub.ai/voronindenis5/receipt-raccoon","kind":"source"},{"label":"Homepage","url":"https://clawhub.ai/voronindenis5/skills/receipt-raccoon","kind":"homepage"}],"safetyScore":84,"overallRank":62,"popularityScore":68,"trustScore":null,"claimedByName":null,"isOwner":false,"seoDescription":"Extracts structured data from receipt text (OCR/photo description) and generates monthly spending reports. Parses merchant, date, line items, tax, total, and ca"},"coverage":{"evidence":{"source":"public-profile","verified":false,"confidence":"medium","updatedAt":"2026-10-09T13:22:49.180Z","emptyReason":null},"protocols":[{"protocol":"OPENCLEW","label":"OpenClaw","status":"self-declared","notes":"Declared in the public agent profile."}],"capabilities":[],"verifiedCount":0,"selfDeclaredCount":1,"capabilityMatrix":{"rows":[{"key":"OPENCLEW","type":"protocol","support":"unknown","confidenceSource":"profile","notes":"Listed on profile"}],"flattenedTokens":"protocol:OPENCLEW|unknown|profile"}},"adoption":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"medium","updatedAt":"2026-10-09T13:22:49.180Z","emptyReason":null},"stars":null,"forks":null,"downloads":2571,"packageName":null,"latestVersion":"0.1.1","tractionLabel":"2.6K downloads"},"release":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"medium","updatedAt":"2026-10-09T13:22:49.144Z","emptyReason":null},"lastUpdatedAt":"2026-10-09T13:22:49.180Z","lastCrawledAt":"2026-10-09T13:22:49.144Z","lastIndexedAt":null,"nextCrawlAt":"2026-10-10T13:22:49.144Z","lastVerifiedAt":null,"highlights":[{"version":"0.1.1","createdAt":"2026-08-11T11:58:13.597Z","changelog":"- Removed the file skill-card.md. - No other changes to documentation or core functionality.","fileCount":10,"zipByteSize":19932},{"version":"0.1.0","createdAt":"2026-08-05T19:49:01.590Z","changelog":"Initial release of Receipt Raccoon. - Extracts structured data from receipt text, including merchant, date, line items, subtotal, tax, and total. - Categorizes items using keyword matching (e.g., groceries, dining, electronics). - Supports accumulation of parsed receipts for monthly and category-based spending reports. - Generates summary stats: total spend, top merchants, category breakdown, and monthly trends. - Outputs data and reports in structured JSON format.","fileCount":10,"zipByteSize":19840}]},"execution":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"low","updatedAt":null,"emptyReason":"No published capability contract is available yet."},"installCommand":"clawhub skill install s17b6amkd3wzqgg640v03a9r1n83gxs1:receipt-raccoon","setupComplexity":"low","setupSteps":["Setup complexity is LOW. This package is likely designed for quick installation with minimal external side-effects.","Final validation: Expose the agent to a mock request payload inside a sandbox and trace the network egress before allowing access to real customer data."],"contract":{"contractStatus":"missing","authModes":[],"requires":[],"forbidden":[],"supportsMcp":false,"supportsA2a":false,"supportsStreaming":false,"inputSchemaRef":null,"outputSchemaRef":null,"dataRegion":null,"contractUpdatedAt":null,"sourceUpdatedAt":null,"freshnessSeconds":null},"invocationGuide":{"preferredApi":{"snapshotUrl":"https://www.xpersona.co/api/v1/agents/clawhub-voronindenis5-receipt-raccoon/snapshot","contractUrl":"https://www.xpersona.co/api/v1/agents/clawhub-voronindenis5-receipt-raccoon/contract","trustUrl":"https://www.xpersona.co/api/v1/agents/clawhub-voronindenis5-receipt-raccoon/trust"},"curlExamples":["curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-voronindenis5-receipt-raccoon/snapshot\"","curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-voronindenis5-receipt-raccoon/contract\"","curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-voronindenis5-receipt-raccoon/trust\""],"jsonRequestTemplate":{"query":"summarize this repo","constraints":{"maxLatencyMs":2000,"protocolPreference":["OPENCLEW"]}},"jsonResponseTemplate":{"ok":true,"result":{"summary":"...","confidence":0.9},"meta":{"source":"CLAWHUB","generatedAt":"2026-10-10T03:26:04.429Z"}},"retryPolicy":{"maxAttempts":3,"backoffMs":[500,1500,3500],"retryableConditions":["HTTP_429","HTTP_503","NETWORK_TIMEOUT"]}},"endpoints":{"dossierUrl":"https://www.xpersona.co/api/v1/agents/clawhub-voronindenis5-receipt-raccoon/dossier","snapshotUrl":"https://www.xpersona.co/api/v1/agents/clawhub-voronindenis5-receipt-raccoon/snapshot","contractUrl":"https://www.xpersona.co/api/v1/agents/clawhub-voronindenis5-receipt-raccoon/contract","trustUrl":"https://www.xpersona.co/api/v1/agents/clawhub-voronindenis5-receipt-raccoon/trust"}},"reliability":{"evidence":{"source":"runtime-metrics","verified":false,"confidence":"low","updatedAt":null,"emptyReason":"No trust, reliability, or runtime telemetry is available."},"trust":{"status":"unavailable","handshakeStatus":"UNKNOWN","verificationFreshnessHours":null,"reputationScore":null,"p95LatencyMs":null,"successRate30d":null,"fallbackRate":null,"attempts30d":null,"trustUpdatedAt":null,"trustConfidence":"unknown","sourceUpdatedAt":null,"freshnessSeconds":null},"decisionGuardrails":{"doNotUseIf":["Contract metadata is missing or unavailable for deterministic execution."],"safeUseWhen":[],"riskFlags":["missing_or_unavailable_contract","trust_data_unavailable","schema_references_missing"],"operationalConfidence":"low"},"executionMetrics":{"observedLatencyMsP50":null,"observedLatencyMsP95":null,"estimatedCostUsd":null,"uptime30d":null,"rateLimitRpm":null,"rateLimitBurst":null,"lastVerifiedAt":null,"verificationSource":null},"runtimeMetrics":{"successRate":null,"avgLatencyMs":null,"avgCostUsd":null,"hallucinationRate":null,"retryRate":null,"disputeRate":null,"p50Latency":null,"p95Latency":null,"lastUpdated":null}},"benchmarks":{"evidence":{"source":"no-benchmark-data","verified":false,"confidence":"low","updatedAt":null,"emptyReason":"No benchmark suites or observed failure patterns are available."},"suites":[],"failurePatterns":[]},"artifacts":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"high","updatedAt":"2026-10-09T13:22:49.180Z","emptyReason":null},"readme":"Skill: receipt-raccoon\n\nOwner: voronindenis5\n\nSummary: Extracts structured data from receipt text (OCR/photo description) and generates monthly spending reports. Parses merchant, date, line items, tax, total, and category. Produces summary stats: top merchants, category breakdown, total spend.\n\nTags: latest:0.1.1\n\nVersion history:\n\nv0.1.1 | 2026-08-11T11:58:13.597Z | auto\n\n- Removed the file skill-card.md. \n- No other changes to documentation or core functionality.\n\nv0.1.0 | 2026-08-05T19:49:01.590Z | auto\n\nInitial release of Receipt Raccoon.\n\n- Extracts structured data from receipt text, including merchant, date, line items, subtotal, tax, and total.\n- Categorizes items using keyword matching (e.g., groceries, dining, electronics).\n- Supports accumulation of parsed receipts for monthly and category-based spending reports.\n- Generates summary stats: total spend, top merchants, category breakdown, and monthly trends.\n- Outputs data and reports in structured JSON format.\n\nArchive index:\n\nArchive v0.1.1: 10 files, 19932 bytes\n\nFiles: LICENSE (1070b), README.md (4270b), references (0b), references/categories.md (3668b), references/receipt_formats.md (3593b), scripts (0b), scripts/receipt_parser.py (28195b), skill-card.md (2268b), SKILL.md (3386b), _meta.json (134b)\n\nFile v0.1.1:SKILL.md\n\n---\nname: receipt-raccoon\ndescription: >\n  Extracts structured data from receipt text (OCR/photo description) and generates\n  monthly spending reports. Parses merchant, date, line items, tax, total, and\n  category. Produces summary stats: top merchants, category breakdown, total spend.\nversion: 1.0.0\nauthor: Denis Voronin\nlicense: MIT\ntags:\n  - receipts\n  - expense-tracking\n  - finance\n  - ocr\n  - budgeting\n---\n\n# Receipt Raccoon\n\nNever manually enter receipt data again. Feed it receipt text and get clean structured data out.\n\n## When to use\n\n- The user provides receipt text from OCR, a photo description, or copy-paste.\n- The user wants to track expenses from receipts.\n- The user wants a monthly or category-based spending summary.\n- The user wants to export receipt data as structured JSON.\n\n## How it works\n\n1. Receive raw receipt text (multiline string).\n2. Run `scripts/receipt_parser.py parse --text \"...\"` or pipe via stdin.\n3. The script extracts: merchant name, date, line items with prices, subtotal, tax, total.\n4. Each item is categorised using keyword matching (groceries, dining, electronics, etc.).\n5. Store parsed receipts in a JSONL ledger file for accumulation.\n6. Run `scripts/receipt_parser.py report --ledger receipts.jsonl` to generate summary stats.\n\n## Usage\n\n### Parse a single receipt\n\n```bash\n# From command line argument\npython3 scripts/receipt_parser.py parse --text \"$(cat receipt.txt)\"\n\n# From stdin\ncat receipt.txt | python3 scripts/receipt_parser.py parse\n\n# From a file\npython3 scripts/receipt_parser.py parse --file receipt.txt\n```\n\n### Accumulate receipts\n\n```bash\n# Parse and append to a ledger\npython3 scripts/receipt_parser.py parse --file receipt.txt --append receipts.jsonl\n```\n\n### Generate reports\n\n```bash\n# Summary of all receipts in ledger\npython3 scripts/receipt_parser.py report --ledger receipts.jsonl\n\n# Filter by month\npython3 scripts/receipt_parser.py report --ledger receipts.jsonl --month 2024-01\n\n# JSON output\npython3 scripts/receipt_parser.py report --ledger receipts.jsonl --json\n```\n\n### Output format\n\nParsed receipt JSON:\n```json\n{\n  \"merchant\": \"WHOLE FOODS MARKET\",\n  \"date\": \"2024-01-15\",\n  \"items\": [\n    {\"name\": \"ORGANIC BANANAS\", \"price\": 2.99, \"category\": \"groceries\"},\n    {\"name\": \"ALMOND MILK\", \"price\": 3.49, \"category\": \"groceries\"}\n  ],\n  \"subtotal\": 6.48,\n  \"tax\": 0.52,\n  \"total\": 7.00,\n  \"currency\": \"USD\"\n}\n```\n\nReport output includes:\n- Total spend, receipt count, average receipt\n- Top merchants by spend\n- Category breakdown with percentages\n- Monthly trend\n- Tax total\n\n## Categorisation\n\nItems are categorised using keyword matching against these categories:\n\n| Category | Example keywords |\n|----------|-----------------|\n| Groceries | milk, bread, eggs, vegetable, fruit, meat, cheese |\n| Dining | burger, pizza, coffee, restaurant, cafe, taco |\n| Electronics | cable, charger, battery, phone, laptop, usb |\n| Clothing | shirt, pants, shoes, dress, jacket |\n| Health | pharmacy, medicine, vitamin, bandage |\n| Household | soap, detergent, paper, cleaning |\n| Transport | gas, fuel, uber, taxi, parking |\n| Entertainment | movie, ticket, game, concert |\n| Other | (fallback) |\n\n## Files\n\n- `scripts/receipt_parser.py` — main parser and report generator\n- `references/categories.md` — full category keyword reference\n- `references/receipt_formats.md` — notes on supported receipt formats\n\nFile v0.1.1:README.md\n\n# Receipt Raccoon 🦝\n\nExtract structured data from receipts and generate spending reports. No more manual data entry.\n\n[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)\n\n## The Problem\n\nNobody likes manually entering receipt data for expense tracking. Every receipt has the same fields — merchant, date, items, prices, tax, total — but typing them all in is tedious and error-prone.\n\n## The Solution\n\n**Receipt Raccoon** takes raw receipt text (from OCR, a photo description, or copy-paste) and automatically:\n1. **Extracts** merchant, date, line items, prices, subtotal, tax, and total\n2. **Categorises** every item using keyword matching (groceries, dining, electronics, etc.)\n3. **Accumulates** receipts in a JSONL ledger for ongoing tracking\n4. **Generates** spending reports with top merchants, category breakdown, and monthly trends\n\n## Quick Start\n\n```bash\n# Parse a receipt from text\npython3 scripts/receipt_parser.py parse --text \"$(cat receipt.txt)\"\n\n# Parse from a file\npython3 scripts/receipt_parser.py parse --file receipt.txt\n\n# Parse and save to ledger\npython3 scripts/receipt_parser.py parse --file receipt.txt --append my_receipts.jsonl\n\n# Generate a spending report\npython3 scripts/receipt_parser.py report --ledger my_receipts.jsonl\n\n# Filter by month\npython3 scripts/receipt_parser.py report --ledger my_receipts.jsonl --month 2024-01\n\n# Run the demo with sample receipts\npython3 scripts/receipt_parser.py demo\n```\n\n## Example Output\n\n### Parsed Receipt (JSON)\n```json\n{\n  \"merchant\": \"WHOLE FOODS MARKET #12345\",\n  \"date\": \"2024-01-15\",\n  \"items\": [\n    {\"name\": \"ORGANIC BANANAS\", \"price\": 2.99, \"category\": \"groceries\"},\n    {\"name\": \"ALMOND MILK\", \"price\": 3.49, \"category\": \"groceries\"},\n    {\"name\": \"FREE RANGE EGGS\", \"price\": 5.99, \"category\": \"groceries\"}\n  ],\n  \"subtotal\": 49.93,\n  \"tax\": 4.00,\n  \"total\": 53.93,\n  \"currency\": \"USD\"\n}\n```\n\n### Spending Report\n```\n============================================================\n  🦝 RECEIPT RACCOON — Spending Report\n============================================================\n\n  Total spend:      $186.16\n  Receipts:         5\n  Average/receipt:  $37.23\n  Total tax:        $13.87\n\n  📊 TOP MERCHANTS\n     1. WHOLE FOODS MARKET #12345  —  $53.93  (1 visits)\n     2. BEST BUY #09999  —  $59.37  (1 visits)\n     3. TRADER JOE'S #444  —  $27.47  (1 visits)\n\n  🏷️  CATEGORY BREAKDOWN\n     groceries      $  49.93  ( 26.8%)  █████  [7 items]\n     electronics    $  54.97  ( 29.5%)  █████  [3 items]\n     dining         $   9.00  (  4.8%)  █  [2 items]\n```\n\n## Features\n\n- **Smart parser** — handles US, EU, ISO, and written date formats\n- **9 spending categories** — groceries, dining, electronics, clothing, health, household, transport, entertainment, office (+ \"other\" fallback)\n- **Weighted keyword matching** — longer keyword matches score higher for better accuracy\n- **JSONL ledger** — append-only storage, easy to version control or import elsewhere\n- **Monthly filtering** — generate reports for any month\n- **Summary stats** — top merchants, category breakdown with percentages, monthly trends, tax totals\n- **Demo mode** — 5 sample receipts show the full workflow\n- **Stdlib only** — no pip installs, runs on any Python 3.10+\n\n## Categorisation\n\nItems are matched against 9 categories with hundreds of keywords:\n\n| Category | Example Items |\n|----------|--------------|\n| Groceries | Bananas, milk, chicken, bread |\n| Dining | Coffee, burger, pizza, restaurant |\n| Electronics | USB cable, charger, phone case |\n| Clothing | T-shirt, jeans, shoes |\n| Health | Vitamins, toothpaste, bandages |\n| Household | Detergent, paper towels, soap |\n| Transport | Gas, parking, Uber |\n| Entertainment | Movie tickets, video games |\n| Office | Pens, notebooks, printer ink |\n\nSee `references/categories.md` for the full keyword list.\n\n## Files\n\n| File | Description |\n|------|-------------|\n| `SKILL.md` | Skill definition and agent workflow |\n| `scripts/receipt_parser.py` | Parser + report generator |\n| `references/categories.md` | Full category keyword reference |\n| `references/receipt_formats.md` | Supported formats and parsing logic |\n\n## License\n\nMIT © Denis Voronin\n\nFile v0.1.1:_meta.json\n\n{\n  \"ownerId\": \"kn75wwn4x6djaf28jbykeamazd81gtdp\",\n  \"slug\": \"receipt-raccoon\",\n  \"version\": \"0.1.1\",\n  \"publishedAt\": 1786449493597\n}\n\nFile v0.1.1:references/categories.md\n\n# Category Keyword Reference\n\nFull list of keywords used for automatic categorisation of receipt items.\n\n## Categories\n\n### groceries\n**Keywords:** milk, bread, eggs, cheese, butter, yogurt, cream, chicken, beef, pork, bacon, turkey, fish, salmon, shrimp, rice, pasta, flour, sugar, oil, salt, pepper, spice, onion, garlic, potato, tomato, carrot, lettuce, spinach, broccoli, apple, banana, orange, lemon, lime, berry, avocado, cucumber, mushroom, corn, juice, water, cereal, oats, granola, jam, honey, peanut butter, nut, almond, tofu, lentil, bean, soup, sauce, ketchup, mustard, mayo, vinegar, soy, noodle, tortilla, bun, bagel, pita, cracker, cookie, chocolate, candy, chip, wine, beer, frozen, ice cream, deli, ham, sausage, organic, kale, zucchini, cauliflower, grape, melon, pineapple, mango, peach, pear, plum, cherry, coconut, and many more.\n\n### dining\n**Keywords:** burger, pizza, sandwich, taco, burrito, sushi, ramen, curry, fried rice, coffee, espresso, latte, cappuccino, tea, smoothie, beer, draft, cocktail, margarita, appetizer, wings, nachos, fries, brunch, breakfast, pancake, steak, lobster, dessert, cake, cheesecake, restaurant, cafe, diner, bistro, grill, takeout, delivery, gratuity, tip, and more.\n\n### electronics\n**Keywords:** cable, charger, usb, hdmi, adapter, battery, phone, laptop, tablet, monitor, keyboard, mouse, headphone, speaker, webcam, router, ssd, hard drive, memory, ram, gpu, motherboard, cpu, screen protector, phone case, smartwatch, camera, lens, power bank, surge protector, light bulb, smart plug.\n\n### clothing\n**Keywords:** shirt, t-shirt, blouse, pants, jeans, trouser, short, skirt, dress, suit, blazer, jacket, coat, sweater, hoodie, shoe, sneaker, boot, sandal, sock, underwear, hat, cap, glove, scarf, tie, belt, wallet, purse, backpack, watch, ring, necklace.\n\n### health\n**Keywords:** pharmacy, drug, medicine, medication, prescription, vitamin, supplement, aspirin, ibuprofen, acetaminophen, bandage, antiseptic, ointment, thermometer, toothbrush, toothpaste, floss, deodorant, shampoo, conditioner, soap, lotion, sunscreen, tissue, razor, contact lens, first aid.\n\n### household\n**Keywords:** detergent, fabric softener, bleach, dish soap, dishwasher, sponge, paper towel, toilet paper, napkin, trash bag, cleaning spray, mop, broom, vacuum, candle, air freshener, laundry, light bulb, aluminum foil, plastic wrap, container, plate, bowl, cup, fork, knife, pan, pot.\n\n### transport\n**Keywords:** gas, fuel, diesel, unleaded, uber, lyft, taxi, bus, train, metro, transit, parking, meter, toll, oil change, tire, brake, wiper, car wash, bike, flight, airline.\n\n### entertainment\n**Keywords:** movie, cinema, theater, concert, game, video game, steam, book, magazine, streaming, netflix, spotify, board game, museum, zoo, amusement, bowling, sport, lottery.\n\n### office\n**Keywords:** pen, pencil, marker, paper, notebook, binder, stapler, tape, glue, scissors, printer, ink, toner, envelope, stamp, desk, chair, calendar, planner, whiteboard.\n\n### other\nFallback for items that don't match any category. Often includes miscellaneous items, services, or unrecognised products.\n\n## Scoring\n\nItems are scored by summing the character length of all matching keywords. Longer keyword matches contribute more weight, which helps disambiguate items that could belong to multiple categories (e.g. \"WINE GLASS\" in dining vs. \"WINE\" bottle in groceries).\n\n## Adding Custom Categories\n\nEdit `CATEGORIES` in `scripts/receipt_parser.py` to add new categories or keywords:\n\n```python\nCATEGORIES[\"pets\"] = [\n    \"dog food\", \"cat food\", \"leash\", \"collar\", \"litter\", \"toy\",\n    \"treat\", \"kibble\", \"aquarium\", \"fish food\",\n]\n```\n\nFile v0.1.1:references/receipt_formats.md\n\n# Supported Receipt Formats\n\nReceipt Raccoon is designed to handle the \"messy text\" that comes out of OCR tools and manual transcription.\n\n## What Works Well\n\n### Standard grocery receipt\n```\nWHOLE FOODS MARKET #12345\n123 Organic Street, Portland, OR 97201\n01/15/2024  14:32\n\nORGANIC BANANAS       2.99\nALMOND MILK           3.49\nFREE RANGE EGGS       5.99\n\nSUBTOTAL             49.93\nTAX                   4.00\nTOTAL                53.93\n```\n\n### Restaurant receipt\n```\nOLIVE GARDEN #234\nJan 20, 2024\n\nLASAGNA              16.99\nCOCA COLA             2.99\nTIRAMISU              7.49\nTIP                   5.00\n\nSUBTOTAL             27.47\nTAX                   2.20\nTOTAL                34.67\n```\n\n### Gas station receipt\n```\nSHELL STATION #5678\n02/01/2024\n\nUNLEADED 10.326 GAL  34.99\n\nSUBTOTAL             34.99\nTOTAL                34.99\n```\n\n## Parsing Logic\n\n### Merchant Detection\n- The merchant is taken from the **first meaningful line** (non-date, non-phone-number).\n- Lines 1-5 are scanned. Lines with only numbers, dates, or phone numbers are skipped.\n\n### Date Detection\nMultiple date formats are recognised:\n- `2024-01-15` (ISO)\n- `01/15/2024` or `1/15/24` (US slash)\n- `15.01.2024` (EU dot)\n- `Jan 15, 2024` or `January 15 2024` (written)\n- `15 Jan 2024` (day-first written)\n\nThe first valid date found anywhere in the text is used.\n\n### Item Detection\nA line is treated as a line item if:\n1. It contains a monetary value (pattern: `XX.XX` or `$XX.XX`)\n2. It is NOT a summary line (subtotal, tax, total, tip)\n3. It does NOT contain skip keywords (phone, address, card info, etc.)\n\nThe item name is extracted as everything before the price, cleaned up by:\n- Removing leading item numbers (e.g., `1 BANANA` → `BANANA`)\n- Removing trailing quantities\n- Trimming extra whitespace and special characters\n\n### Summary Line Detection\nLines containing these keywords are treated as summary lines:\n- **Subtotal:** \"subtotal\", \"sub total\", \"sub-total\"\n- **Tax:** \"tax\", \"vat\", \"gst\", \"hst\", \"pst\", \"sales tax\"\n- **Total:** \"total\", \"balance due\", \"amount due\", \"grand total\"\n- **Tip:** \"tip\", \"gratuity\"\n\n### Fallback Logic\n- If no subtotal is found, it's calculated by summing all line items.\n- If no total is found, it's calculated as subtotal + tax.\n\n## Limitations\n\n### OCR Errors\nThe parser is fairly robust to whitespace variations but cannot fix garbled OCR text. For best results:\n- Ensure the OCR output has one item per line\n- Fix obvious character recognition errors before parsing\n\n### Multi-line Items\nItems that span multiple physical lines (e.g., long product names that wrap) may be split into two items. The parser treats each line independently.\n\n### BOGO and Discounts\n\"Buy one get one\" offers, percentage discounts, and loyalty point redemptions on their own line are typically skipped (they contain keywords like \"discount\", \"savings\", \"reward\"). Negative-value discount lines are also handled.\n\n### Currency\nAll amounts are assumed to be in USD. The `currency` field is set to \"USD\" by default. To support other currencies, modify the `parse_receipt` function.\n\n### Multi-item Quantities\nLines like `3 x BANANA @ 0.99` may not parse perfectly. The parser looks for a single price at the end of each line.\n\n## Tips for Best Results\n\n1. **One item per line** — Most receipt OCR output already follows this.\n2. **Include dates** — Helps with monthly reporting.\n3. **Keep summary keywords clear** — \"SUBTOTAL\", \"TAX\", \"TOTAL\" should be present.\n4. **Remove non-receipt text** — Conversational text from voice/photo descriptions should be cleaned before parsing.\n\nFile v0.1.1:skill-card.md\n\n## Description:\n\nExtracts structured data from receipt text and generates monthly spending reports with merchant, date, line item, tax, total, category, top merchant, category breakdown, and total spend data.\n\nThis skill is ready for commercial/non-commercial use.\n\n## Publisher:\n\n[voronindenis5](https://clawhub.ai/user/voronindenis5)\n\n### License/Terms of Use:\n\nMIT\n\n## Use Case:\n\nExternal users and developers use this skill to parse receipt text from OCR, photo descriptions, or copy-paste input into structured JSON, append receipts to a local JSONL ledger, and generate monthly or category-based spending reports.\n\n### Deployment Geography for Use:\n\nGlobal\n\n## Known Risks and Mitigations:\n\nRisk: Receipt-derived purchase history may be saved locally in a ledger file chosen by the user.\n\nMitigation: Keep ledger files out of public repositories and shared folders, and choose receipt and ledger paths deliberately.\n\nRisk: Garbled OCR, multi-line items, discounts, multi-item quantities, or non-USD receipts can produce incomplete or inaccurate parsed records.\n\nMitigation: Review parsed JSON before relying on reports, clean obvious OCR errors, keep one item per line, and adjust parser logic for non-USD currencies or unsupported receipt formats.\n\n## Reference(s):\n\n- [ClawHub Skill Page](https://clawhub.ai/voronindenis5/skills/receipt-raccoon)\n- [Server-resolved GitHub Repository](https://github.com/voronindenis5/receipt-raccoon)\n- [Category Keyword Reference](references/categories.md)\n- [Supported Receipt Formats](references/receipt_formats.md)\n\n## Skill Output:\n\n**Output Type(s):** [text, markdown, code, shell commands, configuration, guidance]\n\n**Output Format:** [Markdown guidance with shell commands and JSON or plain-text report outputs]\n\n**Output Parameters:** [1D]\n\n**Other Properties Related to Output:** [Can append parsed receipts to a user-selected local JSONL ledger path.]\n\n## Skill Version(s):\n\n0.1.1 (source: ClawHub release metadata; artifact frontmatter says 1.0.0)\n\n## Ethical Considerations:\n\nUsers should evaluate whether this skill is appropriate for their environment, review any generated or modified files before relying on them, and apply their organization's safety, security, and compliance requirements before deployment.\n\nFile v0.1.1:LICENSE\n\nMIT License\n\nCopyright (c) 2026 Denis Voronin\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n\nArchive v0.1.0: 10 files, 19840 bytes\n\nFiles: LICENSE (1070b), README.md (4270b), references (0b), references/categories.md (3668b), references/receipt_formats.md (3593b), scripts (0b), scripts/receipt_parser.py (28195b), skill-card.md (2145b), SKILL.md (3386b), _meta.json (134b)\n\nFile v0.1.0:SKILL.md\n\n---\nname: receipt-raccoon\ndescription: >\n  Extracts structured data from receipt text (OCR/photo description) and generates\n  monthly spending reports. Parses merchant, date, line items, tax, total, and\n  category. Produces summary stats: top merchants, category breakdown, total spend.\nversion: 1.0.0\nauthor: Denis Voronin\nlicense: MIT\ntags:\n  - receipts\n  - expense-tracking\n  - finance\n  - ocr\n  - budgeting\n---\n\n# Receipt Raccoon\n\nNever manually enter receipt data again. Feed it receipt text and get clean structured data out.\n\n## When to use\n\n- The user provides receipt text from OCR, a photo description, or copy-paste.\n- The user wants to track expenses from receipts.\n- The user wants a monthly or category-based spending summary.\n- The user wants to export receipt data as structured JSON.\n\n## How it works\n\n1. Receive raw receipt text (multiline string).\n2. Run `scripts/receipt_parser.py parse --text \"...\"` or pipe via stdin.\n3. The script extracts: merchant name, date, line items with prices, subtotal, tax, total.\n4. Each item is categorised using keyword matching (groceries, dining, electronics, etc.).\n5. Store parsed receipts in a JSONL ledger file for accumulation.\n6. Run `scripts/receipt_parser.py report --ledger receipts.jsonl` to generate summary stats.\n\n## Usage\n\n### Parse a single receipt\n\n```bash\n# From command line argument\npython3 scripts/receipt_parser.py parse --text \"$(cat receipt.txt)\"\n\n# From stdin\ncat receipt.txt | python3 scripts/receipt_parser.py parse\n\n# From a file\npython3 scripts/receipt_parser.py parse --file receipt.txt\n```\n\n### Accumulate receipts\n\n```bash\n# Parse and append to a ledger\npython3 scripts/receipt_parser.py parse --file receipt.txt --append receipts.jsonl\n```\n\n### Generate reports\n\n```bash\n# Summary of all receipts in ledger\npython3 scripts/receipt_parser.py report --ledger receipts.jsonl\n\n# Filter by month\npython3 scripts/receipt_parser.py report --ledger receipts.jsonl --month 2024-01\n\n# JSON output\npython3 scripts/receipt_parser.py report --ledger receipts.jsonl --json\n```\n\n### Output format\n\nParsed receipt JSON:\n```json\n{\n  \"merchant\": \"WHOLE FOODS MARKET\",\n  \"date\": \"2024-01-15\",\n  \"items\": [\n    {\"name\": \"ORGANIC BANANAS\", \"price\": 2.99, \"category\": \"groceries\"},\n    {\"name\": \"ALMOND MILK\", \"price\": 3.49, \"category\": \"groceries\"}\n  ],\n  \"subtotal\": 6.48,\n  \"tax\": 0.52,\n  \"total\": 7.00,\n  \"currency\": \"USD\"\n}\n```\n\nReport output includes:\n- Total spend, receipt count, average receipt\n- Top merchants by spend\n- Category breakdown with percentages\n- Monthly trend\n- Tax total\n\n## Categorisation\n\nItems are categorised using keyword matching against these categories:\n\n| Category | Example keywords |\n|----------|-----------------|\n| Groceries | milk, bread, eggs, vegetable, fruit, meat, cheese |\n| Dining | burger, pizza, coffee, restaurant, cafe, taco |\n| Electronics | cable, charger, battery, phone, laptop, usb |\n| Clothing | shirt, pants, shoes, dress, jacket |\n| Health | pharmacy, medicine, vitamin, bandage |\n| Household | soap, detergent, paper, cleaning |\n| Transport | gas, fuel, uber, taxi, parking |\n| Entertainment | movie, ticket, game, concert |\n| Other | (fallback) |\n\n## Files\n\n- `scripts/receipt_parser.py` — main parser and report generator\n- `references/categories.md` — full category keyword reference\n- `references/receipt_formats.md` — notes on supported receipt formats\n\nFile v0.1.0:README.md\n\n# Receipt Raccoon 🦝\n\nExtract structured data from receipts and generate spending reports. No more manual data entry.\n\n[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)\n\n## The Problem\n\nNobody likes manually entering receipt data for expense tracking. Every receipt has the same fields — merchant, date, items, prices, tax, total — but typing them all in is tedious and error-prone.\n\n## The Solution\n\n**Receipt Raccoon** takes raw receipt text (from OCR, a photo description, or copy-paste) and automatically:\n1. **Extracts** merchant, date, line items, prices, subtotal, tax, and total\n2. **Categorises** every item using keyword matching (groceries, dining, electronics, etc.)\n3. **Accumulates** receipts in a JSONL ledger for ongoing tracking\n4. **Generates** spending reports with top merchants, category breakdown, and monthly trends\n\n## Quick Start\n\n```bash\n# Parse a receipt from text\npython3 scripts/receipt_parser.py parse --text \"$(cat receipt.txt)\"\n\n# Parse from a file\npython3 scripts/receipt_parser.py parse --file receipt.txt\n\n# Parse and save to ledger\npython3 scripts/receipt_parser.py parse --file receipt.txt --append my_receipts.jsonl\n\n# Generate a spending report\npython3 scripts/receipt_parser.py report --ledger my_receipts.jsonl\n\n# Filter by month\npython3 scripts/receipt_parser.py report --ledger my_receipts.jsonl --month 2024-01\n\n# Run the demo with sample receipts\npython3 scripts/receipt_parser.py demo\n```\n\n## Example Output\n\n### Parsed Receipt (JSON)\n```json\n{\n  \"merchant\": \"WHOLE FOODS MARKET #12345\",\n  \"date\": \"2024-01-15\",\n  \"items\": [\n    {\"name\": \"ORGANIC BANANAS\", \"price\": 2.99, \"category\": \"groceries\"},\n    {\"name\": \"ALMOND MILK\", \"price\": 3.49, \"category\": \"groceries\"},\n    {\"name\": \"FREE RANGE EGGS\", \"price\": 5.99, \"category\": \"groceries\"}\n  ],\n  \"subtotal\": 49.93,\n  \"tax\": 4.00,\n  \"total\": 53.93,\n  \"currency\": \"USD\"\n}\n```\n\n### Spending Report\n```\n============================================================\n  🦝 RECEIPT RACCOON — Spending Report\n============================================================\n\n  Total spend:      $186.16\n  Receipts:         5\n  Average/receipt:  $37.23\n  Total tax:        $13.87\n\n  📊 TOP MERCHANTS\n     1. WHOLE FOODS MARKET #12345  —  $53.93  (1 visits)\n     2. BEST BUY #09999  —  $59.37  (1 visits)\n     3. TRADER JOE'S #444  —  $27.47  (1 visits)\n\n  🏷️  CATEGORY BREAKDOWN\n     groceries      $  49.93  ( 26.8%)  █████  [7 items]\n     electronics    $  54.97  ( 29.5%)  █████  [3 items]\n     dining         $   9.00  (  4.8%)  █  [2 items]\n```\n\n## Features\n\n- **Smart parser** — handles US, EU, ISO, and written date formats\n- **9 spending categories** — groceries, dining, electronics, clothing, health, household, transport, entertainment, office (+ \"other\" fallback)\n- **Weighted keyword matching** — longer keyword matches score higher for better accuracy\n- **JSONL ledger** — append-only storage, easy to version control or import elsewhere\n- **Monthly filtering** — generate reports for any month\n- **Summary stats** — top merchants, category breakdown with percentages, monthly trends, tax totals\n- **Demo mode** — 5 sample receipts show the full workflow\n- **Stdlib only** — no pip installs, runs on any Python 3.10+\n\n## Categorisation\n\nItems are matched against 9 categories with hundreds of keywords:\n\n| Category | Example Items |\n|----------|--------------|\n| Groceries | Bananas, milk, chicken, bread |\n| Dining | Coffee, burger, pizza, restaurant |\n| Electronics | USB cable, charger, phone case |\n| Clothing | T-shirt, jeans, shoes |\n| Health | Vitamins, toothpaste, bandages |\n| Household | Detergent, paper towels, soap |\n| Transport | Gas, parking, Uber |\n| Entertainment | Movie tickets, video games |\n| Office | Pens, notebooks, printer ink |\n\nSee `references/categories.md` for the full keyword list.\n\n## Files\n\n| File | Description |\n|------|-------------|\n| `SKILL.md` | Skill definition and agent workflow |\n| `scripts/receipt_parser.py` | Parser + report generator |\n| `references/categories.md` | Full category keyword reference |\n| `references/receipt_formats.md` | Supported formats and parsing logic |\n\n## License\n\nMIT © Denis Voronin\n\nFile v0.1.0:_meta.json\n\n{\n  \"ownerId\": \"kn75wwn4x6djaf28jbykeamazd81gtdp\",\n  \"slug\": \"receipt-raccoon\",\n  \"version\": \"0.1.0\",\n  \"publishedAt\": 1785959341590\n}\n\nFile v0.1.0:references/categories.md\n\n# Category Keyword Reference\n\nFull list of keywords used for automatic categorisation of receipt items.\n\n## Categories\n\n### groceries\n**Keywords:** milk, bread, eggs, cheese, butter, yogurt, cream, chicken, beef, pork, bacon, turkey, fish, salmon, shrimp, rice, pasta, flour, sugar, oil, salt, pepper, spice, onion, garlic, potato, tomato, carrot, lettuce, spinach, broccoli, apple, banana, orange, lemon, lime, berry, avocado, cucumber, mushroom, corn, juice, water, cereal, oats, granola, jam, honey, peanut butter, nut, almond, tofu, lentil, bean, soup, sauce, ketchup, mustard, mayo, vinegar, soy, noodle, tortilla, bun, bagel, pita, cracker, cookie, chocolate, candy, chip, wine, beer, frozen, ice cream, deli, ham, sausage, organic, kale, zucchini, cauliflower, grape, melon, pineapple, mango, peach, pear, plum, cherry, coconut, and many more.\n\n### dining\n**Keywords:** burger, pizza, sandwich, taco, burrito, sushi, ramen, curry, fried rice, coffee, espresso, latte, cappuccino, tea, smoothie, beer, draft, cocktail, margarita, appetizer, wings, nachos, fries, brunch, breakfast, pancake, steak, lobster, dessert, cake, cheesecake, restaurant, cafe, diner, bistro, grill, takeout, delivery, gratuity, tip, and more.\n\n### electronics\n**Keywords:** cable, charger, usb, hdmi, adapter, battery, phone, laptop, tablet, monitor, keyboard, mouse, headphone, speaker, webcam, router, ssd, hard drive, memory, ram, gpu, motherboard, cpu, screen protector, phone case, smartwatch, camera, lens, power bank, surge protector, light bulb, smart plug.\n\n### clothing\n**Keywords:** shirt, t-shirt, blouse, pants, jeans, trouser, short, skirt, dress, suit, blazer, jacket, coat, sweater, hoodie, shoe, sneaker, boot, sandal, sock, underwear, hat, cap, glove, scarf, tie, belt, wallet, purse, backpack, watch, ring, necklace.\n\n### health\n**Keywords:** pharmacy, drug, medicine, medication, prescription, vitamin, supplement, aspirin, ibuprofen, acetaminophen, bandage, antiseptic, ointment, thermometer, toothbrush, toothpaste, floss, deodorant, shampoo, conditioner, soap, lotion, sunscreen, tissue, razor, contact lens, first aid.\n\n### household\n**Keywords:** detergent, fabric softener, bleach, dish soap, dishwasher, sponge, paper towel, toilet paper, napkin, trash bag, cleaning spray, mop, broom, vacuum, candle, air freshener, laundry, light bulb, aluminum foil, plastic wrap, container, plate, bowl, cup, fork, knife, pan, pot.\n\n### transport\n**Keywords:** gas, fuel, diesel, unleaded, uber, lyft, taxi, bus, train, metro, transit, parking, meter, toll, oil change, tire, brake, wiper, car wash, bike, flight, airline.\n\n### entertainment\n**Keywords:** movie, cinema, theater, concert, game, video game, steam, book, magazine, streaming, netflix, spotify, board game, museum, zoo, amusement, bowling, sport, lottery.\n\n### office\n**Keywords:** pen, pencil, marker, paper, notebook, binder, stapler, tape, glue, scissors, printer, ink, toner, envelope, stamp, desk, chair, calendar, planner, whiteboard.\n\n### other\nFallback for items that don't match any category. Often includes miscellaneous items, services, or unrecognised products.\n\n## Scoring\n\nItems are scored by summing the character length of all matching keywords. Longer keyword matches contribute more weight, which helps disambiguate items that could belong to multiple categories (e.g. \"WINE GLASS\" in dining vs. \"WINE\" bottle in groceries).\n\n## Adding Custom Categories\n\nEdit `CATEGORIES` in `scripts/receipt_parser.py` to add new categories or keywords:\n\n```python\nCATEGORIES[\"pets\"] = [\n    \"dog food\", \"cat food\", \"leash\", \"collar\", \"litter\", \"toy\",\n    \"treat\", \"kibble\", \"aquarium\", \"fish food\",\n]\n```\n\nFile v0.1.0:references/receipt_formats.md\n\n# Supported Receipt Formats\n\nReceipt Raccoon is designed to handle the \"messy text\" that comes out of OCR tools and manual transcription.\n\n## What Works Well\n\n### Standard grocery receipt\n```\nWHOLE FOODS MARKET #12345\n123 Organic Street, Portland, OR 97201\n01/15/2024  14:32\n\nORGANIC BANANAS       2.99\nALMOND MILK           3.49\nFREE RANGE EGGS       5.99\n\nSUBTOTAL             49.93\nTAX                   4.00\nTOTAL                53.93\n```\n\n### Restaurant receipt\n```\nOLIVE GARDEN #234\nJan 20, 2024\n\nLASAGNA              16.99\nCOCA COLA             2.99\nTIRAMISU              7.49\nTIP                   5.00\n\nSUBTOTAL             27.47\nTAX                   2.20\nTOTAL                34.67\n```\n\n### Gas station receipt\n```\nSHELL STATION #5678\n02/01/2024\n\nUNLEADED 10.326 GAL  34.99\n\nSUBTOTAL             34.99\nTOTAL                34.99\n```\n\n## Parsing Logic\n\n### Merchant Detection\n- The merchant is taken from the **first meaningful line** (non-date, non-phone-number).\n- Lines 1-5 are scanned. Lines with only numbers, dates, or phone numbers are skipped.\n\n### Date Detection\nMultiple date formats are recognised:\n- `2024-01-15` (ISO)\n- `01/15/2024` or `1/15/24` (US slash)\n- `15.01.2024` (EU dot)\n- `Jan 15, 2024` or `January 15 2024` (written)\n- `15 Jan 2024` (day-first written)\n\nThe first valid date found anywhere in the text is used.\n\n### Item Detection\nA line is treated as a line item if:\n1. It contains a monetary value (pattern: `XX.XX` or `$XX.XX`)\n2. It is NOT a summary line (subtotal, tax, total, tip)\n3. It does NOT contain skip keywords (phone, address, card info, etc.)\n\nThe item name is extracted as everything before the price, cleaned up by:\n- Removing leading item numbers (e.g., `1 BANANA` → `BANANA`)\n- Removing trailing quantities\n- Trimming extra whitespace and special characters\n\n### Summary Line Detection\nLines containing these keywords are treated as summary lines:\n- **Subtotal:** \"subtotal\", \"sub total\", \"sub-total\"\n- **Tax:** \"tax\", \"vat\", \"gst\", \"hst\", \"pst\", \"sales tax\"\n- **Total:** \"total\", \"balance due\", \"amount due\", \"grand total\"\n- **Tip:** \"tip\", \"gratuity\"\n\n### Fallback Logic\n- If no subtotal is found, it's calculated by summing all line items.\n- If no total is found, it's calculated as subtotal + tax.\n\n## Limitations\n\n### OCR Errors\nThe parser is fairly robust to whitespace variations but cannot fix garbled OCR text. For best results:\n- Ensure the OCR output has one item per line\n- Fix obvious character recognition errors before parsing\n\n### Multi-line Items\nItems that span multiple physical lines (e.g., long product names that wrap) may be split into two items. The parser treats each line independently.\n\n### BOGO and Discounts\n\"Buy one get one\" offers, percentage discounts, and loyalty point redemptions on their own line are typically skipped (they contain keywords like \"discount\", \"savings\", \"reward\"). Negative-value discount lines are also handled.\n\n### Currency\nAll amounts are assumed to be in USD. The `currency` field is set to \"USD\" by default. To support other currencies, modify the `parse_receipt` function.\n\n### Multi-item Quantities\nLines like `3 x BANANA @ 0.99` may not parse perfectly. The parser looks for a single price at the end of each line.\n\n## Tips for Best Results\n\n1. **One item per line** — Most receipt OCR output already follows this.\n2. **Include dates** — Helps with monthly reporting.\n3. **Keep summary keywords clear** — \"SUBTOTAL\", \"TAX\", \"TOTAL\" should be present.\n4. **Remove non-receipt text** — Conversational text from voice/photo descriptions should be cleaned before parsing.\n\nFile v0.1.0:skill-card.md\n\n## Description:\n\nExtracts structured receipt data from OCR, photo descriptions, or pasted text and generates spending summaries by merchant, category, month, tax, and total.\n\nThis skill is ready for commercial/non-commercial use.\n\n## Publisher:\n\n[voronindenis5](https://clawhub.ai/user/voronindenis5)\n\n### License/Terms of Use:\n\nMIT\n\n## Use Case:\n\nExternal users, employees, and developers can use this skill to parse receipt text into structured JSON, maintain a local JSONL ledger, and generate spending summaries for budgeting or expense tracking.\n\n### Deployment Geography for Use:\n\nGlobal\n\n## Known Risks and Mitigations:\n\nRisk: Receipt inputs and JSONL ledger outputs can contain sensitive spending history.\n\nMitigation: Store ledgers in a protected location, avoid committing them to shared repositories, and delete them when no longer needed.\n\nRisk: Garbled OCR text or multi-line receipt items can lead to incomplete or inaccurate parsed records.\n\nMitigation: Review parsed merchant, date, line items, tax, and total before relying on the ledger or generated spending reports.\n\n## Reference(s):\n\n- [Receipt Raccoon GitHub repository](https://github.com/voronindenis5/receipt-raccoon)\n- [Receipt Raccoon ClawHub page](https://clawhub.ai/voronindenis5/skills/receipt-raccoon)\n- [Category Keyword Reference](references/categories.md)\n- [Supported Receipt Formats](references/receipt_formats.md)\n\n## Skill Output:\n\n**Output Type(s):** [text, markdown, code, shell commands, configuration, guidance, JSON]\n\n**Output Format:** [JSON for parsed receipts and plain-text or Markdown spending reports with shell command examples.]\n\n**Output Parameters:** [1D]\n\n**Other Properties Related to Output:** [May append parsed receipts to a local JSONL ledger; saved ledgers can contain sensitive financial data.]\n\n## Skill Version(s):\n\n0.1.0 (source: server-resolved release metadata)\n\n## Ethical Considerations:\n\nUsers should evaluate whether this skill is appropriate for their environment, review any generated or modified files before relying on them, and apply their organization's safety, security, and compliance requirements before deployment.\n\nFile v0.1.0:LICENSE\n\nMIT License\n\nCopyright (c) 2026 Denis Voronin\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.","readmeExcerpt":"Skill: receipt-raccoon Owner: voronindenis5 Summary: Extracts structured data from receipt text (OCR/photo description) and generates monthly spending reports. Parses merchant, date, line items, tax, total, and category. Produces summary stats: top merchants, category breakdown, total spend. Tags: latest:0.1.1 Version history: v0.1.1 | 2026-08-11T11:58:13.597Z | auto - Removed the file skill-card.md. - No other chang","codeSnippets":[],"executableExamples":[{"language":"bash","snippet":"# From command line argument\npython3 scripts/receipt_parser.py parse --text \"$(cat receipt.txt)\"\n\n# From stdin\ncat receipt.txt | python3 scripts/receipt_parser.py parse\n\n# From a file\npython3 scripts/receipt_parser.py parse --file receipt.txt"},{"language":"bash","snippet":"# Parse and append to a ledger\npython3 scripts/receipt_parser.py parse --file receipt.txt --append receipts.jsonl"},{"language":"bash","snippet":"# Summary of all receipts in ledger\npython3 scripts/receipt_parser.py report --ledger receipts.jsonl\n\n# Filter by month\npython3 scripts/receipt_parser.py report --ledger receipts.jsonl --month 2024-01\n\n# JSON output\npython3 scripts/receipt_parser.py report --ledger receipts.jsonl --json"},{"language":"json","snippet":"{\n  \"merchant\": \"WHOLE FOODS MARKET\",\n  \"date\": \"2024-01-15\",\n  \"items\": [\n    {\"name\": \"ORGANIC BANANAS\", \"price\": 2.99, \"category\": \"groceries\"},\n    {\"name\": \"ALMOND MILK\", \"price\": 3.49, \"category\": \"groceries\"}\n  ],\n  \"subtotal\": 6.48,\n  \"tax\": 0.52,\n  \"total\": 7.00,\n  \"currency\": \"USD\"\n}"},{"language":"bash","snippet":"# Parse a receipt from text\npython3 scripts/receipt_parser.py parse --text \"$(cat receipt.txt)\"\n\n# Parse from a file\npython3 scripts/receipt_parser.py parse --file receipt.txt\n\n# Parse and save to ledger\npython3 scripts/receipt_parser.py parse --file receipt.txt --append my_receipts.jsonl\n\n# Generate a spending report\npython3 scripts/receipt_parser.py report --ledger my_receipts.jsonl\n\n# Filter by month\npython3 scripts/receipt_parser.py report --ledger my_receipts.jsonl --month 2024-01\n\n# Run the demo with sample receipts\npython3 scripts/receipt_parser.py demo"},{"language":"json","snippet":"{\n  \"merchant\": \"WHOLE FOODS MARKET #12345\",\n  \"date\": \"2024-01-15\",\n  \"items\": [\n    {\"name\": \"ORGANIC BANANAS\", \"price\": 2.99, \"category\": \"groceries\"},\n    {\"name\": \"ALMOND MILK\", \"price\": 3.49, \"category\": \"groceries\"},\n    {\"name\": \"FREE RANGE EGGS\", \"price\": 5.99, \"category\": \"groceries\"}\n  ],\n  \"subtotal\": 49.93,\n  \"tax\": 4.00,\n  \"total\": 53.93,\n  \"currency\": \"USD\"\n}"}],"parameters":null,"dependencies":[],"permissions":[],"extractedFiles":[{"path":"SKILL.md","content":"---\nname: receipt-raccoon\ndescription: >\n  Extracts structured data from receipt text (OCR/photo description) and generates\n  monthly spending reports. Parses merchant, date, line items, tax, total, and\n  category. Produces summary stats: top merchants, category breakdown, total spend.\nversion: 1.0.0\nauthor: Denis Voronin\nlicense: MIT\ntags:\n  - receipts\n  - expense-tracking\n  - finance\n  - ocr\n  - budgeting\n---\n\n# Receipt Raccoon\n\nNever manually enter receipt data again. Feed it receipt text and get clean structured data out.\n\n## When to use\n\n- The user provides receipt text from OCR, a photo description, or copy-paste.\n- The user wants to track expenses from receipts.\n- The user wants a monthly or category-based spending summary.\n- The user wants to export receipt data as structured JSON.\n\n## How it works\n\n1. Receive raw receipt text (multiline string).\n2. Run `scripts/receipt_parser.py parse --text \"...\"` or pipe via stdin.\n3. The script extracts: merchant name, date, line items with prices, subtotal, tax, total.\n4. Each item is categorised using keyword matching (groceries, dining, electronics, etc.).\n5. Store parsed receipts in a JSONL ledger file for accumulation.\n6. Run `scripts/receipt_parser.py report --ledger receipts.jsonl` to generate summary stats.\n\n## Usage\n\n### Parse a single receipt\n\n```bash\n# From command line argument\npython3 scripts/receipt_parser.py parse --text \"$(cat receipt.txt)\"\n\n# From stdin\ncat receipt.txt | python3 scripts/receipt_parser.py parse\n\n# From a file\npython3 scripts/receipt_parser.py parse --file receipt.txt\n```\n\n### Accumulate receipts\n\n```bash\n# Parse and append to a ledger\npython3 scripts/receipt_parser.py parse --file receipt.txt --append receipts.jsonl\n```\n\n### Generate reports\n\n```bash\n# Summary of all receipts in ledger\npython3 scripts/receipt_parser.py report --ledger receipts.jsonl\n\n# Filter by month\npython3 scripts/receipt_parser.py report --ledger receipts.jsonl --month 2024-01\n\n# JSON output\npython3 scripts/receipt_parser.py report --ledger receipts.jsonl --json\n```\n\n### Output format\n\nParsed receipt JSON:\n```json\n{\n  \"merchant\": \"WHOLE FOODS MARKET\",\n  \"date\": \"2024-01-15\",\n  \"items\": [\n    {\"name\": \"ORGANIC BANANAS\", \"price\": 2.99, \"category\": \"groceries\"},\n    {\"name\": \"ALMOND MILK\", \"price\": 3.49, \"category\": \"groceries\"}\n  ],\n  \"subtotal\": 6.48,\n  \"tax\": 0.52,\n  \"total\": 7.00,\n  \"currency\": \"USD\"\n}\n```\n\nReport output includes:\n- Total spend, receipt count, average receipt\n- Top merchants by spend\n- Category breakdown with percentages\n- Monthly trend\n- Tax total\n\n## Categorisation\n\nItems are categorised using keyword matching against these categories:\n\n| Category | Example keywords |\n|----------|-----------------|\n| Groceries | milk, bread, eggs, vegetable, fruit, meat, cheese |\n| Dining | burger, pizza, coffee, restaurant, cafe, taco |\n| Electronics | cable, charger, battery, phone, laptop, usb |\n| Clothing | shirt, pants, shoes, dress, jacket |\n| Health | pharmacy, medicine, vitamin, bandage "},{"path":"README.md","content":"# Receipt Raccoon 🦝\n\nExtract structured data from receipts and generate spending reports. No more manual data entry.\n\n[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)\n\n## The Problem\n\nNobody likes manually entering receipt data for expense tracking. Every receipt has the same fields — merchant, date, items, prices, tax, total — but typing them all in is tedious and error-prone.\n\n## The Solution\n\n**Receipt Raccoon** takes raw receipt text (from OCR, a photo description, or copy-paste) and automatically:\n1. **Extracts** merchant, date, line items, prices, subtotal, tax, and total\n2. **Categorises** every item using keyword matching (groceries, dining, electronics, etc.)\n3. **Accumulates** receipts in a JSONL ledger for ongoing tracking\n4. **Generates** spending reports with top merchants, category breakdown, and monthly trends\n\n## Quick Start\n\n```bash\n# Parse a receipt from text\npython3 scripts/receipt_parser.py parse --text \"$(cat receipt.txt)\"\n\n# Parse from a file\npython3 scripts/receipt_parser.py parse --file receipt.txt\n\n# Parse and save to ledger\npython3 scripts/receipt_parser.py parse --file receipt.txt --append my_receipts.jsonl\n\n# Generate a spending report\npython3 scripts/receipt_parser.py report --ledger my_receipts.jsonl\n\n# Filter by month\npython3 scripts/receipt_parser.py report --ledger my_receipts.jsonl --month 2024-01\n\n# Run the demo with sample receipts\npython3 scripts/receipt_parser.py demo\n```\n\n## Example Output\n\n### Parsed Receipt (JSON)\n```json\n{\n  \"merchant\": \"WHOLE FOODS MARKET #12345\",\n  \"date\": \"2024-01-15\",\n  \"items\": [\n    {\"name\": \"ORGANIC BANANAS\", \"price\": 2.99, \"category\": \"groceries\"},\n    {\"name\": \"ALMOND MILK\", \"price\": 3.49, \"category\": \"groceries\"},\n    {\"name\": \"FREE RANGE EGGS\", \"price\": 5.99, \"category\": \"groceries\"}\n  ],\n  \"subtotal\": 49.93,\n  \"tax\": 4.00,\n  \"total\": 53.93,\n  \"currency\": \"USD\"\n}\n```\n\n### Spending Report\n```\n============================================================\n  🦝 RECEIPT RACCOON — Spending Report\n============================================================\n\n  Total spend:      $186.16\n  Receipts:         5\n  Average/receipt:  $37.23\n  Total tax:        $13.87\n\n  📊 TOP MERCHANTS\n     1. WHOLE FOODS MARKET #12345  —  $53.93  (1 visits)\n     2. BEST BUY #09999  —  $59.37  (1 visits)\n     3. TRADER JOE'S #444  —  $27.47  (1 visits)\n\n  🏷️  CATEGORY BREAKDOWN\n     groceries      $  49.93  ( 26.8%)  █████  [7 items]\n     electronics    $  54.97  ( 29.5%)  █████  [3 items]\n     dining         $   9.00  (  4.8%)  █  [2 items]\n```\n\n## Features\n\n- **Smart parser** — handles US, EU, ISO, and written date formats\n- **9 spending categories** — groceries, dining, electronics, clothing, health, household, transport, entertainment, office (+ \"other\" fallback)\n- **Weighted keyword matching** — longer keyword matches score higher for better accuracy\n- **JSONL ledger** — append-only storage, easy to version control or import elsewhere\n- **Mont"},{"path":"_meta.json","content":"{\n  \"ownerId\": \"kn75wwn4x6djaf28jbykeamazd81gtdp\",\n  \"slug\": \"receipt-raccoon\",\n  \"version\": \"0.1.1\",\n  \"publishedAt\": 1786449493597\n}"},{"path":"references/categories.md","content":"# Category Keyword Reference\n\nFull list of keywords used for automatic categorisation of receipt items.\n\n## Categories\n\n### groceries\n**Keywords:** milk, bread, eggs, cheese, butter, yogurt, cream, chicken, beef, pork, bacon, turkey, fish, salmon, shrimp, rice, pasta, flour, sugar, oil, salt, pepper, spice, onion, garlic, potato, tomato, carrot, lettuce, spinach, broccoli, apple, banana, orange, lemon, lime, berry, avocado, cucumber, mushroom, corn, juice, water, cereal, oats, granola, jam, honey, peanut butter, nut, almond, tofu, lentil, bean, soup, sauce, ketchup, mustard, mayo, vinegar, soy, noodle, tortilla, bun, bagel, pita, cracker, cookie, chocolate, candy, chip, wine, beer, frozen, ice cream, deli, ham, sausage, organic, kale, zucchini, cauliflower, grape, melon, pineapple, mango, peach, pear, plum, cherry, coconut, and many more.\n\n### dining\n**Keywords:** burger, pizza, sandwich, taco, burrito, sushi, ramen, curry, fried rice, coffee, espresso, latte, cappuccino, tea, smoothie, beer, draft, cocktail, margarita, appetizer, wings, nachos, fries, brunch, breakfast, pancake, steak, lobster, dessert, cake, cheesecake, restaurant, cafe, diner, bistro, grill, takeout, delivery, gratuity, tip, and more.\n\n### electronics\n**Keywords:** cable, charger, usb, hdmi, adapter, battery, phone, laptop, tablet, monitor, keyboard, mouse, headphone, speaker, webcam, router, ssd, hard drive, memory, ram, gpu, motherboard, cpu, screen protector, phone case, smartwatch, camera, lens, power bank, surge protector, light bulb, smart plug.\n\n### clothing\n**Keywords:** shirt, t-shirt, blouse, pants, jeans, trouser, short, skirt, dress, suit, blazer, jacket, coat, sweater, hoodie, shoe, sneaker, boot, sandal, sock, underwear, hat, cap, glove, scarf, tie, belt, wallet, purse, backpack, watch, ring, necklace.\n\n### health\n**Keywords:** pharmacy, drug, medicine, medication, prescription, vitamin, supplement, aspirin, ibuprofen, acetaminophen, bandage, antiseptic, ointment, thermometer, toothbrush, toothpaste, floss, deodorant, shampoo, conditioner, soap, lotion, sunscreen, tissue, razor, contact lens, first aid.\n\n### household\n**Keywords:** detergent, fabric softener, bleach, dish soap, dishwasher, sponge, paper towel, toilet paper, napkin, trash bag, cleaning spray, mop, broom, vacuum, candle, air freshener, laundry, light bulb, aluminum foil, plastic wrap, container, plate, bowl, cup, fork, knife, pan, pot.\n\n### transport\n**Keywords:** gas, fuel, diesel, unleaded, uber, lyft, taxi, bus, train, metro, transit, parking, meter, toll, oil change, tire, brake, wiper, car wash, bike, flight, airline.\n\n### entertainment\n**Keywords:** movie, cinema, theater, concert, game, video game, steam, book, magazine, streaming, netflix, spotify, board game, museum, zoo, amusement, bowling, sport, lottery.\n\n### office\n**Keywords:** pen, pencil, marker, paper, notebook, binder, stapler, tape, glue, scissors, printer, ink, toner, envelope, stamp, desk, chair, calendar, planner, whiteboard.\n"},{"path":"references/receipt_formats.md","content":"# Supported Receipt Formats\n\nReceipt Raccoon is designed to handle the \"messy text\" that comes out of OCR tools and manual transcription.\n\n## What Works Well\n\n### Standard grocery receipt\n```\nWHOLE FOODS MARKET #12345\n123 Organic Street, Portland, OR 97201\n01/15/2024  14:32\n\nORGANIC BANANAS       2.99\nALMOND MILK           3.49\nFREE RANGE EGGS       5.99\n\nSUBTOTAL             49.93\nTAX                   4.00\nTOTAL                53.93\n```\n\n### Restaurant receipt\n```\nOLIVE GARDEN #234\nJan 20, 2024\n\nLASAGNA              16.99\nCOCA COLA             2.99\nTIRAMISU              7.49\nTIP                   5.00\n\nSUBTOTAL             27.47\nTAX                   2.20\nTOTAL                34.67\n```\n\n### Gas station receipt\n```\nSHELL STATION #5678\n02/01/2024\n\nUNLEADED 10.326 GAL  34.99\n\nSUBTOTAL             34.99\nTOTAL                34.99\n```\n\n## Parsing Logic\n\n### Merchant Detection\n- The merchant is taken from the **first meaningful line** (non-date, non-phone-number).\n- Lines 1-5 are scanned. Lines with only numbers, dates, or phone numbers are skipped.\n\n### Date Detection\nMultiple date formats are recognised:\n- `2024-01-15` (ISO)\n- `01/15/2024` or `1/15/24` (US slash)\n- `15.01.2024` (EU dot)\n- `Jan 15, 2024` or `January 15 2024` (written)\n- `15 Jan 2024` (day-first written)\n\nThe first valid date found anywhere in the text is used.\n\n### Item Detection\nA line is treated as a line item if:\n1. It contains a monetary value (pattern: `XX.XX` or `$XX.XX`)\n2. It is NOT a summary line (subtotal, tax, total, tip)\n3. It does NOT contain skip keywords (phone, address, card info, etc.)\n\nThe item name is extracted as everything before the price, cleaned up by:\n- Removing leading item numbers (e.g., `1 BANANA` → `BANANA`)\n- Removing trailing quantities\n- Trimming extra whitespace and special characters\n\n### Summary Line Detection\nLines containing these keywords are treated as summary lines:\n- **Subtotal:** \"subtotal\", \"sub total\", \"sub-total\"\n- **Tax:** \"tax\", \"vat\", \"gst\", \"hst\", \"pst\", \"sales tax\"\n- **Total:** \"total\", \"balance due\", \"amount due\", \"grand total\"\n- **Tip:** \"tip\", \"gratuity\"\n\n### Fallback Logic\n- If no subtotal is found, it's calculated by summing all line items.\n- If no total is found, it's calculated as subtotal + tax.\n\n## Limitations\n\n### OCR Errors\nThe parser is fairly robust to whitespace variations but cannot fix garbled OCR text. For best results:\n- Ensure the OCR output has one item per line\n- Fix obvious character recognition errors before parsing\n\n### Multi-line Items\nItems that span multiple physical lines (e.g., long product names that wrap) may be split into two items. The parser treats each line independently.\n\n### BOGO and Discounts\n\"Buy one get one\" offers, percentage discounts, and loyalty point redemptions on their own line are typically skipped (they contain keywords like \"discount\", \"savings\", \"reward\"). Negative-value discount lines are also handled.\n\n### Currency\nAll amounts are assumed to be in USD. The `currency` field is set t"}],"languages":[],"docsSourceLabel":"CLAWHUB","editorialOverview":"Extracts structured data from receipt text (OCR/photo description) and generates monthly spending reports. Parses merchant, date, line items, tax, total, and category. Produces summary stats: top merchants, category breakdown, total spend. Skill: receipt-raccoon Owner: voronindenis5 Summary: Extracts structured data from receipt text (OCR/photo description) and generates monthly spending reports. Parses merchant, date, line items, tax, total, and category. Produces summary stats: top merchants, category breakdown, total spend. Tags: latest:0.1.1 Version history: v0.1.1 | 2026-08-11T11:58:13.597Z | auto - Removed the file skill-card.md. - No other chang","editorialQuality":{"score":100,"threshold":65,"status":"ready","wordCount":1621,"uniquenessScore":61,"reasons":[]}},"media":{"evidence":{"source":"no-media","verified":false,"confidence":"low","updatedAt":"2026-10-09T13:22:49.180Z","emptyReason":"No screenshots, media assets, or demo links are available."},"primaryImageUrl":null,"mediaAssetCount":0,"assets":[],"demoUrl":null},"ownerResources":{"evidence":{"source":"unclaimed","verified":false,"confidence":"low","updatedAt":"2026-10-09T13:22:49.180Z","emptyReason":"This page has not been claimed by the agent owner."},"hasCustomPage":false,"customPageUpdatedAt":null,"customLinks":[],"structuredLinks":{"docsUrl":null,"demoUrl":null,"supportUrl":null,"pricingUrl":null,"statusUrl":null},"customPage":null},"relatedAgents":{"evidence":{"source":"protocol-neighbors","verified":false,"confidence":"medium","updatedAt":"2026-10-10T03:26:04.429Z","emptyReason":null},"items":[{"id":"8ebccd8e-3863-4187-8355-c3f14e1f9edf","entityType":"agent","canonicalPath":"/agent/iofficeai-aionui","slug":"iofficeai-aionui","name":"AionUi","description":"Free, local, open-source 24/7 Cowork app and OpenClaw for Gemini CLI, Claude Code, Codex, OpenCode, Qwen Code, Goose CLI, Auggie, and more | 🌟 Star if you like it!","url":"https://github.com/iOfficeAI/AionUi","homepage":"https://www.aionui.com","source":"GITHUB_REPOS","protocols":["MCP","OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-10-09T19:11:12.944Z","createdAt":"2026-02-25T03:38:16.584Z","downloads":null},{"id":"b917f68a-ebff-438e-84f8-3f4b2494c0bc","entityType":"agent","canonicalPath":"/agent/activepieces-activepieces","slug":"activepieces-activepieces","name":"activepieces","description":"AI Agents & MCPs & AI Workflow Automation • (~400 MCP servers for AI agents) • AI Automation / AI Agent with MCPs • AI Workflows & AI Agents • MCPs for AI Agents","url":"https://github.com/activepieces/activepieces","homepage":"https://www.activepieces.com","source":"GITHUB_REPOS","protocols":["OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-04-15T02:22:12.426Z","createdAt":"2026-02-25T03:38:12.412Z","downloads":null},{"id":"5cb26759-3a39-483f-94cf-276a98c13bb8","entityType":"agent","canonicalPath":"/agent/cherryhq-cherry-studio","slug":"cherryhq-cherry-studio","name":"cherry-studio","description":"AI productivity studio with smart chat, autonomous agents, and 300+ assistants. Unified access to frontier LLMs","url":"https://github.com/CherryHQ/cherry-studio","homepage":"https://cherry-ai.com","source":"GITHUB_REPOS","protocols":["MCP","OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-04-11T14:38:40.986Z","createdAt":"2026-02-25T03:38:19.379Z","downloads":null},{"id":"6f6582d0-5d76-4f0f-b81d-86520247950b","entityType":"agent","canonicalPath":"/agent/copilotkit-copilotkit","slug":"copilotkit-copilotkit","name":"CopilotKit","description":"The Frontend for Agents & Generative UI. React + Angular","url":"https://github.com/CopilotKit/CopilotKit","homepage":"https://docs.copilotkit.ai","source":"GITHUB_REPOS","protocols":["OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-03-25T09:50:57.846Z","createdAt":"2026-02-25T03:39:14.617Z","downloads":null}],"links":{"hub":"/agent","source":"/agent/source/clawhub","protocols":[{"label":"OpenClaw","href":"/agent/protocol/openclew"}]}}}