Imagine this: every time someone finishes a purchase, they snap a photo of the receipt and text it to your number. A few seconds later, all the key fields—merchant, date, total, tax, category, payment method—show up in a Google Sheet, ready for bookkeeping or expense dashboards.
In this tutorial, you’ll build exactly that: a "text-a-receipt" AI bot that uses:
- Blooio Messaging with a pre-warmed iMessage number
- n8n’s Blooio node to receive incoming messages and images
- Claude AI (with "parse binary images" enabled) to extract receipt data
- Google Sheets node to log structured JSON data automatically
Prerequisites
You’ll need:
- A Blooio account and API key from app.blooio.com
- At least one pre-warmed number in Blooio …
Imagine this: every time someone finishes a purchase, they snap a photo of the receipt and text it to your number. A few seconds later, all the key fields—merchant, date, total, tax, category, payment method—show up in a Google Sheet, ready for bookkeeping or expense dashboards.
In this tutorial, you’ll build exactly that: a "text-a-receipt" AI bot that uses:
- Blooio Messaging with a pre-warmed iMessage number
- n8n’s Blooio node to receive incoming messages and images
- Claude AI (with "parse binary images" enabled) to extract receipt data
- Google Sheets node to log structured JSON data automatically
Prerequisites
You’ll need:
- A Blooio account and API key from app.blooio.com
- At least one pre-warmed number in Blooio (Blooio shows how many pre-warmed numbers are available on blooio.com)
- An n8n instance (Cloud or self-hosted)
- A Google account with access to Google Sheets
- An Anthropic API key for Claude from the Anthropic console
Step 1: Set Up Blooio and Your Pre-Warmed Number
- Go to app.blooio.com and create a new organization if you don’t have one yet.
- On the home/dashboard page, note the number of pre-warmed numbers available. As of writing, there are 3 pre-warmed numbers ready for testing and small production pilots.
- In the Blooio app, generate an API key and store it somewhere safe—you’ll paste this into n8n as credentials.
At this point, you’re ready to send and receive iMessages/texts through Blooio programmatically.
Step 2: Create the Google Sheet for Receipts
Create a new Google Sheet called something like Receipt Log (AI Bot) with these columns:
- Timestamp
- From (phone/contact)
- Merchant
- Date
- Total
- Tax
- Currency
- Category
- Payment Method
- Raw JSON
You can adapt this schema to your needs, but this structure works well for bookkeeping and analytics.
Step 3: Connect n8n to Blooio (Incoming Messages)
- Log into your n8n instance.
- Install or enable the Blooio Messaging integration if it isn’t already available in your nodes list. You can find it at n8n.io/integrations/blooio-messaging.
- Create a new workflow and add the Blooio trigger/node that listens for incoming messages (typically exposed as a webhook-style trigger).
In the Blooio dashboard, point your chosen pre-warmed iMessage number to the n8n webhook URL so that every incoming text or image to that number triggers your workflow.
Test it: Send yourself a text and a photo of a receipt to confirm:
- The workflow is triggered
- The incoming message includes binary data for images
Step 4: Configure the AI Node (Claude with Parse Binary Images)
Now let’s parse the receipt image with Claude via the n8n AI node.
- Add an AI node after your Blooio trigger.
- Choose Claude as the provider and plug in your Anthropic API key from console.anthropic.com.
- Enable "parse binary images" in the AI node so the model can see the receipt image directly from the incoming Blooio message.
The Claude Prompt for Receipt Parsing
Use this as the system/instruction prompt in your AI node:
You are a precise receipt parser.
Input: a photo of a receipt sent by a user.
Task: Extract clean, structured data from the receipt and return **valid JSON only**, no prose.
JSON schema (all fields required, use null if missing):
{
"merchant": "string",
"purchase_date": "YYYY-MM-DD",
"purchase_time": "HH:MM or null",
"total_amount": "number",
"subtotal_amount": "number or null",
"tax_amount": "number or null",
"currency": "3-letter ISO code or null",
"payment_method": "string (e.g. VISA, Mastercard, Cash, Amex, Apple Pay)",
"line_items": [
{
"description": "string",
"quantity": "number or null",
"unit_price": "number or null",
"line_total": "number or null",
"category": "string (e.g. groceries, restaurant, transport, software, utilities, other)"
}
],
"notes": "string with any extra comments, discounts, tips, or ambiguity notes"
}
Rules:
- Never include explanations, markdown, or commentary.
- If multiple totals exist (e.g. with tip), choose the **final amount charged** as total_amount.
- Normalize dates to YYYY-MM-DD even if the receipt uses another format.
- If you are unsure, make your best guess and add an explanation to the notes field.
In the AI node, map the incoming binary image data from the Blooio node as the image input so Claude can see the receipt image.
Step 5: Map AI Output to Google Sheets
After the AI node, add a Set node (or Code node if you prefer) to:
- Parse the JSON returned by Claude
- Flatten/map it to match your Google Sheets columns
For example, you might map:
Timestamp→{{$now}}or the message timestamp from BlooioFrom→ sender phone number from Blooio’s payloadMerchant→{{$json["merchant"]}}Date→{{$json["purchase_date"]}}Total→{{$json["total_amount"]}}Tax→{{$json["tax_amount"]}}Currency→{{$json["currency"]}}Payment Method→{{$json["payment_method"]}}Raw JSON→ full stringified JSON from the AI node (handy for debugging)
Then:
- Add a Google Sheets node, choose Append or Add Row.
- Authenticate with your Google account.
- Select the spreadsheet and worksheet you created in Step 2.
- Map each field from the Set node to the correct column in the sheet.
Run the workflow with test data (e.g. send a new receipt photo) and verify that a new row appears in your sheet with all fields populated.
Step 6: Optional Enhancements
Once the basic flow works, consider adding:
Validation & Fallback: If Claude returns invalid JSON, route the message to a human-review channel or a separate "Errors" sheet.
Auto-Categorization Rules: Post-process the category field with your own rules or another AI call, then update the row in Sheets.
Reply Back via Blooio: Add a Blooio send node at the end to confirm: "Got your receipt from {merchant} for {total}. Logged to your expense sheet."
This turns your workflow into a full loop: user sends a receipt, AI parses, data is stored, and the user gets instant confirmation via iMessage.
Useful Links
- Blooio Messaging Dashboard (get your API key, pre-warmed numbers): app.blooio.com
- Blooio + n8n Integration: n8n.io/integrations/blooio-messaging
- Blooio Home: blooio.com
- n8n Automation Platform: n8n.io
- Anthropic Console (Claude API key): console.anthropic.com
Wrapping Up
You’ve just built an AI-powered receipt parser that turns text messages into structured expense data—no backend coding required. This same pattern works for invoices, business cards, handwritten notes, and more.
What will you automate next with Blooio and n8n? Drop a comment below with your ideas!