Install
$ agentstack add skill-skills-il-accounting-israeli-receipt-scanner ✓ scanned · ✓ verified — works with Claude Code, Cursor, and more.
Security review
✓ PassedNo issues found. Passed automated security review. · v0.1.0 How review works →
- ✓ Prompt-injection patterns
- ✓ Secret / credential exfiltration
- ✓ Dangerous shell & filesystem operations
- ✓ Untrusted network calls
- ✓ Known-malicious package signatures
What it can access
- ✓ Network access No
- ✓ Filesystem access No
- ✓ Shell / process execution No
- ✓ Environment & secrets No
- ✓ Dynamic code execution No
From automated source analysis of v0.1.0. “Used” means the capability is present in the source — more access means more to trust, not that it’s unsafe.
About
Israeli Receipt Scanner
Instructions
Step 1: Prepare the Receipt Image or Text
Identify the input format. The receipt may be provided as:
- A photographed or scanned image (JPEG, PNG, PDF)
- Raw OCR text already extracted by another tool
- A digital receipt in plain text or HTML format
If the input is an image, use vision capabilities to read the text. Israeli receipts typically contain a mix of Hebrew (right-to-left) and English (left-to-right) text, along with numbers. Pay attention to bidirectional text rendering, as merchant names are usually in Hebrew while product codes and amounts use Latin numerals.
Step 2: Identify the Document Type
Determine whether the document is:
- Tax Invoice (חשבונית מס): Contains a VAT registration number, itemized VAT amount, and the header "חשבונית מס" or "חשבונית מס / קבלה". These are issued by authorized businesses (osek murshe) and are required for VAT deduction claims.
- Receipt (קבלה): A simpler proof of payment without detailed VAT breakdown. Header typically says "קבלה" only.
- Tax Invoice / Receipt combo (חשבונית מס / קבלה): A combined document serving as both invoice and receipt, common in retail. Look for the dual header.
- Proforma Invoice (חשבונית עסקה): A preliminary invoice before payment, not valid for VAT deduction.
Look for the document type indicator near the top of the receipt, usually printed in bold or larger font immediately below the merchant header.
The document type drives input-VAT deductibility, but the document type alone is NOT sufficient. Only a tax invoice (חשבונית מס) or tax invoice / receipt (חשבונית מס / קבלה) issued by an osek murshe with a valid 9-digit osek number can support an input-VAT deduction, AND it must be an original invoice issued in the buyer's name ("על שמו כדין"). Above the small-sum threshold set by ITA regulations the buyer's name and the buyer's VAT/osek number are mandatory invoice fields. A generic retail slip with no printed buyer (a typical supermarket חשבונית מס / קבלה handed to a walk-in customer) does NOT entitle that customer to deduct input VAT. A plain receipt (קבלה), a proforma invoice (חשבונית עסקה), or any document from an osek patur also cannot.
A foreign document (US sales tax, EU VAT, etc.) is never an Israeli tax invoice: its tax line must NEVER populate vat_amount or vat_deductible. Israeli input VAT does not exist on such a document (reverse-charge self-reporting applies instead).
Step 3: Extract Core Fields
Parse the following fields from the receipt text:
- Merchant Name (שם העסק): Usually the first line, in Hebrew. May also include an English transliteration or brand name.
- VAT Registration Number (מספר עוסק מורשה / ח.פ.): A 9-digit number, often prefixed with "עוסק מורשה" or "ח.פ.". Located near the merchant header.
- Supplier Type (
supplier_type): classify the issuer asosek_murshe(charges and itemizes VAT),osek_patur(exempt dealer, no VAT breakdown), orunknown. An osek-patur invoice carries no deductible input VAT.
- Buyer Name (שם הקונה / שם הלקוח) and Buyer VAT Number (
buyer_name,buyer_vat_number): The name (and, above the small-sum threshold, the VAT/osek number) of the party the invoice was issued TO. Set both tonullwhen the document carries no printed buyer (typical for walk-in retail slips). These drive deductibility: input VAT is deductible only when the invoice is in the buyer's name and that buyer matches the business claiming the deduction. - Branch/Address (כתובת): Street address, city. Useful for expense location tracking.
- Date (תאריך): Israeli receipts use DD/MM/YYYY format. Look for "תאריך" label or a date near the top.
- Time (שעה): Often adjacent to the date.
- Receipt/Invoice Number (מספר חשבונית / מספר קבלה): A sequential number, look for "מס' חשבונית", "מספר קבלה", or "מס' אסמכתא".
- Allocation Number (מספר הקצאה): A SHAAM-issued number printed on B2B tax invoices above the current threshold (
allocation_number: string|null). Set tonullif absent. See the Allocation Number section for the threshold timeline. - Line Items: Product name (Hebrew), quantity, unit price, and line total. Supermarket receipts list items with barcodes.
- Subtotal (סכום לפני מע"מ): Amount before VAT.
- VAT Amount (מע"מ): Currently 18% in Israel (as of 2026). Look for "מע"מ" label.
- Total Amount (סה"כ): The final amount paid, in NIS. Look for "סה"כ", "סה"כ לתשלום", or "סכום כולל".
- Payment Method (אמצעי תשלום): Credit card (last 4 digits), cash (מזומן), digital wallet, or bank transfer.
- Number of Payments (תשלומים): If paid in installments, the number and amount per installment.
Step 4: Handle Common Israeli Retailer Formats
Different Israeli retailers use distinct receipt layouts:
Supermarkets (Shufersal, Rami Levy, Yochananof, Osher Ad):
- Barcode-based item listing with Hebrew product names
- Club member discounts shown as negative line items
- Separate sections for produce (weighed items) vs packaged goods
- Deposit charges (פיקדון) for bottles
- Look for "חסכת" (you saved) summary line
Gas Stations (Paz, Sonol, Delek, Ten):
- Fuel type (95, 98, diesel/סולר) and liters
- Price per liter
- Odometer reading (sometimes)
- Car wash or convenience store items as separate line items
Restaurants and Cafes:
- Service charge (שירות) as a percentage, usually 10-12%
- Tip line (טיפ) may be blank or filled
- Table number and server name
- Split bill indicators
Online Purchases (invoices from Israeli e-commerce):
- Digital format, often PDF
- Shipping charges (משלוח) as separate line item
- Order number in addition to invoice number
Step 5: Auto-Categorize the Expense
Map the merchant and items to standard Israeli accounting categories commonly used in bookkeeping:
| Category | Hebrew | Common Merchants/Items | |----------|--------|----------------------| | Groceries | מזון ומכולת | Shufersal, Rami Levy, Osher Ad | | Fuel | דלק | Paz, Sonol, Delek, Ten | | Office Supplies | ציוד משרדי | Office Depot, Kravitz | | Meals & Entertainment | ארוחות ואירוח | Restaurants, cafes | | Transportation | תחבורה | Parking, tolls, public transit | | Software & SaaS | תוכנה ושירותי ענן | Digital subscriptions | | Professional Services | שירותים מקצועיים | Consultants, lawyers | | Telecommunications | תקשורת | Cellcom, Partner, HOT | | Insurance | ביטוח | Insurance premiums | | Maintenance | תחזוקה | Repairs, cleaning | | Medical | רפואה | Pharmacies, clinics | | Travel | נסיעות | Hotels, flights |
Use the merchant name and item descriptions to determine the most likely category. If ambiguous, default to "General Expenses (הוצאות כלליות)" and flag for manual review.
Step 6: Output Structured Data
Generate the extracted data in a structured format. Default to JSON:
{
"document_type": "tax_invoice_receipt",
"merchant": {
"name_he": "שופרסל דיל",
"name_en": "Shufersal Deal",
"vat_registration": "520044078",
"supplier_type": "osek_murshe",
"branch": "סניף רמת אביב",
"address": "רחוב איינשטיין 15, תל אביב"
},
"buyer_name": null,
"buyer_vat_number": null,
"document_number": "12345678",
"allocation_number": null,
"date": "2026-03-08",
"time": "14:32",
"items": [
{
"description": "חלב תנובה 3% 1 ליטר",
"quantity": 2,
"unit_price": 6.90,
"total": 13.80
}
],
"subtotal": 245.50,
"vat_rate": 0.18,
"vat_amount": 44.19,
"vat_deductible": false,
"total": 289.69,
"currency": "ILS",
"payment": {
"method": "credit_card",
"card_last_four": "4532",
"installments": 1
},
"category": "groceries",
"category_he": "מזון ומכולת",
"needs_review": true,
"warnings": ["No buyer printed on the invoice; not deductible as an input-VAT invoice for any specific business without an invoice issued in the buyer's name"]
}
For CSV output, flatten the structure with these columns: date, document_type, document_number, allocation_number, merchant_name, vat_registration, supplier_type, buyer_name, buyer_vat_number, subtotal, vat_amount, vat_deductible, total, payment_method, category
Set vat_deductible to true ONLY when ALL of these hold: the document is a חשבונית מס or חשבונית מס / קבלה issued by an osek murshe with a valid 9-digit osek number; it is an original invoice issued in the buyer's name and that buyer matches the business's own osek number (which the user supplies or configures); and, when the net amount is above the SHAAM threshold for the invoice's date, an allocation number is present. Set it to false (and set needs_review: true) when no buyer is printed or the buyer does not match, for a plain קבלה, a חשבונית עסקה (proforma), an osek-patur supplier, a fuel/vehicle-category document (see Step 7), or any foreign document.
Step 7: Validate Extracted Data
Perform validation checks on the extracted data:
- VAT Calculation: Verify that
total = subtotal + vat_amount(tolerance of 0.05 NIS for rounding). Current Israeli VAT rate is 18%. - Date Format: Ensure the date is valid and not in the future.
- VAT Registration: Validate that the osek murshe number is exactly 9 digits. The 9-digit number also carries a check digit, which should be validated with the Luhn mod-10 algorithm (the same scheme Israeli ID-type numbers use). Do NOT invent any other checksum formula.
- Line Item Totals: Verify that sum of line items equals the subtotal (within rounding tolerance).
- Currency: Confirm amounts are in NIS. Flag if foreign currency symbols are detected. A foreign document's tax line (US sales tax, EU VAT, etc.) must NEVER populate
vat_amountorvat_deductible; it is not Israeli input VAT (reverse-charge applies). Setvat_deductible: falseand add a foreign-vendor warning. - Allocation Number Threshold (date-aware): If the document is a tax invoice (חשבונית מס or חשבונית מס / קבלה), select the threshold band from the INVOICE's own date (not today): NIS 20,000 for invoices dated in 2025, NIS 10,000 for January through May 2026, NIS 5,000 from 1 June 2026 onward. If the subtotal (net) exceeds the band for that date AND
allocation_numberis null, emit a warning that without an allocation number the input VAT is not deductible. Digitizing an older shoebox invoice must not throw a false warning under today's lower band. - Buyer Identity: Confirm the invoice is issued in the buyer's name and that
buyer_vat_numbermatches the business's own osek number (which the user supplies or configures). If no buyer is printed, or it does not match, setvat_deductible: falseandneeds_review: true, and add a warning that the supplier side is valid but the invoice is not in the buyer's name. - Six-Month Deduction Window: Input VAT must be claimed within 6 months of the invoice issue date. If the invoice date is more than 6 months in the past, emit a warning that the invoice may be past the deduction window.
- Deductibility Flag: Set
vat_deductible: trueonly when ALL hold: a חשבונית מס / חשבונית מס / קבלה from an osek murshe with a valid 9-digit osek number; an allocation number when above the date-aware threshold; the invoice is in the buyer's name and matches the business; and the category is not blocked. For fuel/vehicle-category documents (passenger vehicles and their running costs, including fuel) input VAT is restricted: a mixed business/private input deducts only two-thirds when use is mainly for the business (and as little as one-quarter when use is mainly private), so setvat_deductible: falsewithneeds_review: trueand flag the mixed-use split for the bookkeeper rather than claiming full deduction. Setfalsefor a plain קבלה, a חשבונית עסקה (proforma), an osek-patur supplier, or a foreign document.
If validation fails, include a warnings array in the output with specific issues found.
Examples
Example 1: Supermarket Receipt
User says: "Scan this Shufersal receipt and extract the data."
The user provides an image of a Shufersal receipt. The agent:
- Reads the receipt image using vision capabilities
- Identifies the document as "חשבונית מס / קבלה" (tax invoice / receipt)
- Extracts merchant: "שופרסל דיל, סניף רמת אביב"
- Extracts VAT registration: "520044078"
- Parses 12 line items including produce, dairy, and packaged goods
- Identifies club discount line: "הנחת מועדון: -15.40"
- Extracts totals: subtotal 312.80, VAT 56.30, total 369.10
- Payment: credit card ending 4532, 1 installment
- Auto-categorizes as "groceries" (מזון ומכולת)
- No buyer is printed on this walk-in slip, so sets vatdeductible: false and needsreview: true with a "no buyer printed" warning
- Outputs structured JSON with all fields populated
Result: Complete JSON output with all 12 items, validated totals (VAT check passed), category assignment, and vatdeductible: false (needsreview) because the supermarket slip was not issued in the business's name.
Example 2: Gas Station Receipt with Multiple Items
User says: "Parse this Sonol gas station receipt. I need it for my expense report."
The user provides a Sonol receipt image. The agent:
- Reads the receipt and identifies it as a tax invoice
- Extracts merchant: "סונול, תחנת שירות הרצליה"
- Parses two line items: fuel (95 octane, 35.2 liters at 7.45/L = 262.24) and a convenience store purchase (water bottle, 8.90)
- Extracts totals: subtotal 229.78, VAT 41.36, total 271.14
- Payment: credit card ending 8891
- Since the receipt contains both fuel and a store item, creates two category assignments:
- Fuel (דלק): 262.24 NIS
- General (כללי): 8.90 NIS
- Sets
vat_deductible: falseandneeds_review: truebecause input VAT on passenger-vehicle fuel is restricted (mixed business/private use deducts only two-thirds when use is mainly for the business), and flags the mixed-use split for the bookkeeper rather than claiming full deduction - Outputs structured JSON with split categorization
Result: JSON with split expense categories, a vehicle/fuel deductibility flag, and a note that the receipt covers two expense types.
Example 3: Restaurant Tax Invoice
User says: "I have a restaurant receipt from a business lunch. Extract the details for tax deduction purposes."
The user provides a restaurant receipt. The agent:
- Reads the receipt and identifies it as "חשבונית מס / קבלה"
- Extracts merchant: "מסעדת רפאל, תל אביב"
- Extracts VAT registration number for tax deduction eligibility
- Parses food items, drinks, and a 12% service charge
- Flags that input VAT on business meals and hosting (אירוח) is generally NOT deductible in Israel (narrow exceptions aside, e.g. hosting guests from abroad), so
vat_deductibleshould usually befalsefor this receipt, and advises confirming with the bookkeeper - Outputs JSON with a
tax_notesfield: "Input VAT on business meals/hosting is generally non-deductible in Israel; consult your bookkeeper for any exception"
Result: Complete JSON with tax-relevant notes for the accountant.
Bundled Resources
> Pending. Earlier versions of this skill listed scripts/receipt_parser.py, scripts/export_csv.py, references/israeli-vat-rates.md, and references/receipt-field-glossary.md, but those files were never shipped. They are noted here for traceability and pending real implementations. For batch OCR today, use vision-LLM (Claude Sonnet vision, GPT-4o, Gemini 2.x) over Tesseract/EasyOCR, with your own shell or Python wrapper.
Allocation Number Field
For B2B tax invoices at or above the current SHAAM threshold, the printed invoice must include an allocation number (mispar haktza'a) alongside the standard tax-invoice fields. Threshold timeline:
- Jan 2025 - Dec 2025: required when net amount > NIS 20,000
- Jan 2026 (current): required when net amount > NIS 10,000
- Jun 2026 onwards: required when net amount > NIS
…
Source & license
This open-source skill is cataloged on AgentStack and links to its original source — we do not rehost the code.
- Author: skills-il
- Source: skills-il/accounting
- License: MIT
Install and usage instructions live in the source repository linked above.
Reviews
No reviews yet — be the first.
Write a review
Versions
- v0.1.0 Imported from the upstream source.