Snap a receipt, get a row: a Telegram bot that files your expenses into Google Sheets
Photograph a receipt, send it to a Telegram bot, and let AI drop the vendor, date, GST and total into a Google Sheet — automatically. No code, free to try, about an hour to build. Verified against official docs, July 2026.
Published 13 Jul 2026 · Facts checked 13 Jul 2026
What you'll have by the end of this morning: a private Telegram bot you can text a photo of any receipt to — from the taxi queue, the hardware shop, the kopitiam — and within a minute a tidy row appears in a Google Sheet: date, vendor, what you bought, the GST, and the total, each in its own column. No shoebox of curling thermal paper in March. No evening of squinting and typing. You snap, you carry on, the sheet fills itself.
This is the first playbook in the library on purpose. It's the one a real Singapore owner asked for out loud — "I track my expenses… manually using excel. Would xero + ocr be worthwhile, or other similar setup that does simple bookkeeping and uses OCR for input of expenses?" (r/smeSingapore, Dec 2025). Here's that setup, built from free parts, in about an hour.
Is this for you?
Build it if you collect more than a handful of receipts a month, you keep (or keep meaning to keep) an expenses spreadsheet, and GST season makes you wince. Skip it if you already run Xero or QuickBooks with their receipt-capture apps switched on — those are built for exactly this, and native beats glued-on. This playbook is for the owner still on a spreadsheet, or the one who wants a free capture step feeding a sheet before deciding on paid accounting software.
You do not need to know what an "API" is, you will not open a terminal, and you will not write code. You will paste a couple of things into the right boxes. That's the whole job.
What it costs
S$0 per month at realistic small-business volume, on genuine free tiers — no credit card to start any of them (verified 13 July 2026; free tiers change, so glance at the linked pages before you build):
| Part | Free tier | Card needed? |
|---|---|---|
| Telegram bot | Free — the bot platform is "free for both users and developers" (Telegram) | No |
| Make (the wiring) | Free plan: 1,000 credits/month, no time limit, 2 active scenarios (Make pricing) | No |
| Google Gemini (the AI that reads the receipt) | Free tier; image input is free of charge on Flash models (Gemini pricing) | No |
| Google Sheets | Free with a personal Google account | No |
Each receipt costs roughly 3 Make operations (receive → read → write). On the free 1,000 credits/month that's around 300 receipts a month before you'd ever pay a cent — comfortably more than most small firms generate. If you outgrow it, Make's first paid plan is US$9/month (Make pricing, 13 Jul 2026) — but most readers never will, and we say so plainly.
Before you start (about 10 minutes)
Open four free things in browser tabs. No payment details anywhere:
- Telegram — install the app on your phone if you haven't; you already know it.
- A Google account — your normal Gmail is fine. This owns the Sheet and the Gemini key.
- A free Gemini API key. Don't let the words scare you: an API key is just a long password that lets Make talk to Google's AI. You never need to understand it — you copy it once and keep it private. Go to Google AI Studio, sign in with your Google account, and click Get API key → Create API key. You may be asked to tick an "I agree" box, and the screen may mention a "Google Cloud project" — that's all normal and still free; you will not be asked for a card (Google confirms the free tier needs no billing). Copy the long string it gives you into a blank email to yourself or your Notes app for a minute. Treat it like a password.
- A free Make account — sign up at make.com with your email. The Free plan is the default; there's no card field. Make will ask a few setup questions (your role, team size, what you want to automate) — answer anything, it doesn't matter. If it asks you to pick a region (EU or US), either is fine. None of it asks for payment.
Done? Then the build is four short steps.
Build it, step by step
Step 1 — Make the Telegram bot (5 minutes)
In Telegram, search for @BotFather (the official one with the blue tick). Start a chat and send /newbot. It asks two things: a name (anything — "My Expense Bot") and a username that must end in bot (e.g. ronnies_expense_bot). If it replies "Sorry, this username is already taken," don't stop — just make up another (add your initials or a number) until one is accepted. BotFather then replies with a token — a long line like 8123456789:AAF…. Copy it into your note. That token is how Make will talk to your bot. Creating and running bots is free (Telegram).
Now open your new bot (tap the link BotFather gives you) and send it any message, so it exists as a chat.
Step 2 — Make the Google Sheet (10 minutes)
Easiest way: download the ready-made receipt-expense-sheet-template.csv, then in a new Google Sheet go File → Import → Upload and drop the file in. In the box that appears, choose Replace current sheet, leave every other option as it is, and click Import data. You now have the right columns plus one example row so you can see the format.
Or type them yourself: in a new Sheet, put one word in each cell across row 1 — A1 Date, B1 Vendor, C1 Category, D1 Items, E1 Subtotal, F1 GST, G1 Total, H1 Currency, I1 ReceiptFrom.
Either way, name the sheet "Expenses" and leave the rows below blank. The bot owns this sheet from here.
Step 3 — Wire it together in Make (give this one a patient 30–45 minutes the first time)
This is the heart of it, and it's the part that takes real attention — so don't rush it, and don't feel slow. In Make, click Create a new scenario. You'll get a blank canvas. You add modules one at a time: click the big +, search the app name, click the module. To chain them, click the small + on the right edge of the module you just placed — that adds the next one already connected. If two ever end up as separate bubbles, drag a line from the right dot of one to the left dot of the next.
Module 1 — Telegram Bot → "Watch Updates". This is the trigger; it fires when your bot receives a message. Click Create a connection, paste your bot token from Step 1, save. (Make's Telegram app.)
Now, before wiring anything else, prime it: send your bot a photo of a receipt in Telegram, then in Make click Run once (bottom-left). This makes a real message flow in, so that in the next steps Make can actually show you the receipt's fields instead of empty boxes. This one habit prevents most of the confusion below.
Module 2 — Telegram Bot → "Download a File". A photo arrives as a reference, not the actual image, so this fetches the picture. Click the File ID box: a panel opens on the right listing fields from Module 1. Open Photo — you'll see several copies of the same photo in different sizes. Click the last (largest) one's File ID. It turns into a blue tag in the box. (Bigger = sharper = the AI reads it better. If the panel is empty, you skipped the "prime it" step above — go do it.)
Module 3 — Google Gemini AI → "Extract Structured Data". This is the module that reads the receipt. First, Create a connection and paste your free Gemini API key from the setup step — Make's Gemini app connects with that AI Studio key, nothing else (Make ↔ Gemini). Then three settings:
- Model: choose a Flash model (its name contains the word Flash, e.g.
gemini-2.x-flash). Do not pick a "Pro" model — Flash is the one that reads images free; Pro can cost money. - The image: point it at the Data from Module 2 (the file you just downloaded).
- What to pull out: this module lets you list the fields you want back, so they come out separately (ready for the sheet), not as one lump. Add these fields —
date,vendor,category,items,subtotal,gst,total,currency— and paste the guidance fromreceipt-ocr-gemini-prompt.txtinto its instruction/description box so it knows what each means. (It's fill-in-the-blank — you don't edit any logic.)
If your Make shows only one "Result" text box instead of separate fields (some accounts have an older Gemini module): add one more module between this and the sheet — search "Parse JSON", feed it that Result, and its output will have the separate
date,vendor,gst… fields. It's one extra click; then continue exactly as below. So this is a four- or five-module build depending on your Make — both are fine.
Module 4 — Google Sheets → "Add a Row". Click Create a connection and sign in with your Google account. Google will pop up a window asking you to allow Make to access your Sheets — this is expected and safe; click Allow / Continue. If it warns "Google hasn't verified this app," click Advanced → Continue (go to Make) — that's normal for tools like this. Then choose your "Expenses" sheet, and map each column to the matching field from Module 3 (or from Parse JSON): Date→date, Vendor→vendor, Category→category, Items→items, Subtotal→subtotal, GST→gst, Total→total, Currency→currency. For ReceiptFrom, map the sender's name from Module 1. (Make's Google Sheets app.)
That's the build. Click Save (bottom-left).
Step 4 — Switch it on (2 minutes)
Look at the bottom-left of the scenario. There's a big round Run once button (that's for testing, by hand) and next to it a small ON/OFF toggle labelled scheduling. Turn the toggle ON and, if asked, set it to run as often as possible (on the free plan Make checks every 15 minutes at minimum — fine for receipts, which aren't a stopwatch job). The toggle ON is what makes it run by itself from now on; Run once is only for the test below. Your bot is on duty.
Test it works (2 minutes)
Don't trust it until you've watched it work once:
- Take a photo of a receipt and send it to your bot in Telegram. (Send a fresh one each time you test — a photo Make has already processed won't trigger it again, and you'll think it failed when it didn't.)
- In Make, click Run once.
- Open your "Expenses" sheet. A new row should appear — date, vendor, GST and total each in its own column.
If that row is there, you're done: from now on it's snap-and-forget. Send a few real receipts and eyeball the first handful of rows to learn how it handles your typical formats.
When it doesn't
Three things trip people up. All three are quick:
- Nothing appears in the sheet. Almost always the scheduling toggle is still off, or your test photo was one Make already processed. Check the toggle is ON, send a fresh photo, and click Run once. If Make shows a red error on the Telegram module, re-paste the bot token.
- A row appears, but everything's crammed in one cell, or the columns are blank. This is the mapping, not the receipt. It means the AI handed back one block of text instead of separate fields — add the "Parse JSON" module described in Step 3 (between Gemini and the sheet) and map from its output. While you're there, check Module 3's Model is a Flash one (a Pro model can error or cost money). This is the single most common first-build snag.
- The row is laid out right but a number is wrong or GST is blank. Blurry, crumpled or handwritten receipts confuse any reader — re-shoot in good light, flat, filling the frame, and photograph thermal receipts the same week before they fade. A blank GST is usually correct: many small vendors don't itemise it, and the bot can't invent what isn't printed.
Your data (read this one)
Two honest points, because this is the whole reason Little Red Bot exists:
Where your receipts go. The photo travels from Telegram to Make's servers to Google's Gemini and into your own Google Sheet — all overseas cloud services. Your Sheet stays in your Google account; only you (and anyone you share it with) can see it. Restrict sharing to whoever does your books.
The free-AI catch nobody mentions. On Gemini's free tier, Google's own terms say it "uses the content you submit… to provide, improve, and develop Google products," and that "human reviewers may read, annotate, and process your API input and output" — and it warns plainly: "Do not submit sensitive, confidential, or personal information to the Unpaid Services" (Gemini API Additional Terms, effective 23 Mar 2026). For ordinary expense receipts — a taxi fare, a box of screws, a team lunch — that's usually an acceptable trade for a free tool. But if your receipts carry anything you'd not want a stranger to read, you have two clean options: switch the same setup to Gemini's paid tier, where Google's terms say it doesn't use your prompts to improve its products (same page); or swap Module 3 for a receipt-specialist OCR such as WiseOCR (built into Make) or Veryfi's free tier, which don't train on your documents. The plumbing stays identical — only the reader changes. Under the PDPA, using your own receipts to keep your own books is ordinary business use; the thing to watch is which third parties you hand the images to, which is exactly what this note is for.
Switch it off
No lock-in, nothing to cancel, no spend to stop. To undo it completely: in Make, toggle the scenario off (pauses it) or delete it (removes it). In Telegram, message @BotFather /deletebot to kill the bot. Your Sheet and its rows are yours — keep them, export them, or delete them. That's it. Because you never entered a card anywhere, there is no bill to worry about, ever.
What's next
Get the free receipt sheet template and the AI prompt, build the four modules this week, and send it ten real receipts. Once it's humming, the natural next step is the daily money snapshot playbook — it reuses this exact Telegram-plus-Sheet skill to text you a plain-English summary of the day. And when a "digital bookkeeping" vendor quotes you four figures for what you just built free, you'll know which article to read first: is that PSG quote actually fair?
Sources
Every factual claim above traces to one of these, fetched on the fact-check date in the byline.
- Telegram — Bots: free for users and developers (BotFather)
- Make pricing — Free plan, 1,000 credits/month, no time limit (fetched 13 Jul 2026)
- Make — Google Gemini AI app (modules incl. Extract structured data from files)
- Google — Gemini API pricing: free tier, image input free of charge (updated 9 Jul 2026)
- Google AI Studio — create a free Gemini API key (no billing required)
- Google — Gemini API Additional Terms: how unpaid vs paid data is used (effective 23 Mar 2026)
- Make — Google Sheets app (Add a Row)
How we're funded: some links on this page are affiliate links — if you sign up through one, we may earn a commission, at no extra cost to you. It never changes what we recommend. Full disclosure.
Get the next one in your inbox
The Red Dot Report — one useful automation email a week.