Expense Report Form in Telegram: 6 Fields

Expense Report Form in Telegram: 6 Fields

Easy Post Team · · expense report form expense report template telegram bot expense tracking receipts
Table of Contents

When your people pay work expenses from their own money and send the proof to a chat, the amount, the project or the receipt itself is easy to lose. This form asks for each of them at the moment of sending, and it asks you for one decision.

Here is an expense report form that runs in a Telegram bot: six fields to keep or change, two replies to paste in, and a private channel where approved expenses collect with their receipts. If you searched for an expense report template in Excel, this is not one. The form collects expenses. It does not add them up or export them to a file, and a receipt has to be a photo, not a PDF. If your people send PDF invoices, tell support what you need.

Six fields for an expense report form, and one to add

This is the Expense Report template in Easy Post. After you pick it, you can rename, delete or add fields in Form Settings (the Form button on the pipeline page); the no-code form builder guide compares the ways to build such a form. Keep a field only if you will read the answer.

  • Category (required; prompt "Expense category:", buttons: Transport, Food, Supplies, Communication, Other). Rename the buttons to the lines of your own books, so nothing has to be re-sorted at month end. Keep the names short: Telegram caps what a button can carry, and a long name can fail.
  • Amount (required; prompt "Amount spent:"). It is typed text with no check, so "about forty" goes through. Open the field in Form Settings and switch its Type from Text to Number. The bot then asks again until the answer is a number with at most five characters of sign or unit next to it, such as "42.50 USD", "€12" or "1 500 грн". "Forty dollars" and "12 USD and 3 EUR" are refused with "Please enter a number." You can write that refusal yourself under "Button and error texts" on the field, so give an example there. Put the currency in the prompt ("Amount spent, with a currency code, like 42.50 USD:"), because the form has no idea of money. The amount is kept exactly as typed.
  • Date (required; prompt "Date of expense:"). Typed and never checked, so "yesterday" goes through. Name the format in the prompt, or delete the field if your people file the same day. If you delete any field, delete its line from the Post Template too, or the channel will show the line as written, for example "Date: {date}".
  • Description (required; prompt "What was it for?"; up to 500 characters). A bare "Taxi" gives you nothing to decide on. Change the prompt to "What was it for, and for whom?" and a taxi arrives with a client.
  • Receipt photo (required; prompt "Photo of receipt:"; up to 3 photos, a number the editor does not let you change). The step takes photos only. A PDF or any file sent before the first photo gets "Please send a photo.", and a file sent after a photo does not end up in the report. After each photo the bot says "tap Done when finished", and the employee taps Done unless they send all three. A screenshot of an emailed receipt works if it is sent as a photo. "Required" has a catch, explained under "Where an expense gets stuck".
  • Project (optional; prompt "Charge to project:", buttons: General, Project A, Project B, Travel). Rename the buttons to your own projects or cost centers. The skip button is also captioned "General", so the screen shows two General buttons. Only the first one stores a value. Whoever presses the second leaves no project at all, and the line is missing on your card. Under "Button and error texts" on the field, change the skip button to "No project", or check Required and the skip button goes away.
  • Your name (add this one yourself; a required text field). The card shows the sender's Telegram first name and, if they have one, their @username, and a Telegram name can be "Mike 🚀". Add the field with "+ Add Field" so you reimburse a person, not a nickname. Then open Post Template on the same page and click the new field's token under "Insert tokens". A new field does not appear in the channel post until you put its token there.

From receipt to reimbursement

  1. Pin one link in the team chat or the onboarding note. After your own test, "Still to do" on the pipeline page shows "Send the form to real people" with a "Copy link" button. The employee taps Start and answers one question at a time, with a progress bar. Nothing in the form checks who the sender is: anyone who gets the link can file, and your tap on Approve is the check.
  2. The expense reaches you in Telegram with buttons: Approve and Reject, plus Edit and Delete. The card shows the text answers, the sender and a link. The receipt is not in the card: before you decide, open the expense in the dashboard, where receipts appear as small thumbnails that open at full size.
  3. Look, then decide. Compare the amount with the receipt. If a figure is mistyped, press Edit before you approve: it opens the expense on the website, where you can fix the typed answers (amount, date, description) but not the category or the photos. If there is no receipt or it cannot be read, press Reject. The rejection reply is one fixed text for every reason, so write it to ask for a new photo.
  4. Approve means "accepted for reimbursement". The employee gets your reply at once (text below), and the expense is posted into your private channel with its receipt photos. Reject sends your rejection text. Delete hides the expense without telling the employee (it stays under the Deleted tab), so the employee gets no answer at all.
  5. The channel is your ledger. Each approved expense is one post: the fields in your Post Template, with the receipt photos under them. Find a trip, a project or an amount with the search inside the channel.

Chat with the bot of an expense report form: a Start button, the expense category as a column of five buttons, and the receipt photo step with a Done button

Illustration: the texts are the bot's own, with steps 2 to 4 left out; names and data are made up.

Private Telegram message to the manager: a new expense report form entry with category, amount, date, description and project, the sender's name and username, and Approve, Reject, Edit and Delete buttons

Illustration: the texts are the bot's own, and "Your name" is the field you add yourself; names and data are made up.

Two replies to paste into the settings

The form settings have two boxes for this, Approved Message and Rejected Message. They accept Telegram HTML tags such as <b> and <a href>. The defaults, "Your submission has been approved!" and "Your submission was not approved.", tell the employee nothing about money. Replace them.

When you accept the expense:

Expense accepted. It will be paid out with Friday's payroll. Questions: t.me/yourfinance

Replace t.me/yourfinance with your own contact in both replies.

When you cannot accept it yet:

We could not accept this expense. Send it again with a clear photo of the receipt, or ask here: t.me/yourfinance

Promise only what you will do. An employee told "paid on Friday" who is not paid on Friday has been misled.

The message an employee receives after approval: expense accepted, paid out with Friday's payroll

Illustration: the reply is the text pasted above; names and data are made up.

Where the approved expenses live

Connect a private channel that only you and your finance person are in. Receipts carry names, card digits and places, and a public channel would show all of it to everyone. The same expense is also kept in the dashboard. People you add to your project get the Telegram cards too, and they can approve. Each of them needs an Easy Post account first: on the project page press Members, enter their email and press Invite. Each also has to link their own Telegram (press "Test the form in Telegram" on the pipeline page while signed in as them), or no cards reach them. Members are not limited to approving: they can change the form and the actions too.

If you want the figures in a spreadsheet, add a webhook. On the pipeline page open Actions. In the Add Action form choose Webhook, name the action, enter the URL and press Add, and leave Auto-approve unchecked, so the webhook runs when you press Approve. Easy Post then sends each approved expense as JSON to that URL: the answers, links to the receipt photos, and the sender's Telegram name, username and chat ID. The amount arrives as typed text ("1 500 UAH"), so a spreadsheet cannot add it up until you clean it. The photo links open without signing in, so send them only to a tool you trust. You write the receiving end, or point it at an automation tool that accepts webhooks and adds a row to a spreadsheet. Webhooks are not included in every plan, so check the pricing page first.

Where an expense gets stuck

  • "Required" does not guarantee a receipt. The receipt step takes up to three photos, so it has a Done button, and a person can press it before sending any photo. The expense then arrives without a receipt. This is why you open the dashboard before you press Approve, and why the rejection reply above asks for a new photo.
  • Duplicates. The same receipt can be sent twice, by mistake or on purpose, and nothing flags it. Before you approve, search the channel for the amount and the date.
  • The card is cut short. It shows only the first 300 characters of each answer, while Description allows 500. The dashboard shows the full text.
  • The per-person limit. The template allows 10 form starts a day and 50 a month per Telegram account, and an abandoned or rejected attempt counts too. Someone on a long trip can reach the monthly limit; they are told when they press Start, and you are not. Raise Daily Limit and Monthly Limit under "Submission Limits" in Form Settings.
  • A failed post. The employee gets your "accepted" reply even if the post to the channel fails, for example when the bot has lost its administrator rights. The dashboard then shows a red "Not published:" note on the expense. Look for it after you approve.
  • Auto-approve. Leave Auto-approve off on the publish action. With it on, or with every action switched off, nothing waits for you: the card has no buttons, and the employee only sees "Thank you! Your submission is awaiting review." and never gets your answer.

What the form does not do

  • It does not add up expenses, convert currencies or export to Excel or CSV. The dashboard lists them one by one, and the built-in way to move them into a spreadsheet is the webhook. Month-end totals are still yours.
  • It does not compare an amount with its receipt, find duplicates, or apply an expense policy: no budgets, no limits per category.
  • It does not pay anyone, and it has no built-in link to accounting software. There is no "paid" status: an expense is Waiting, then Published (approved and posted to the channel) or Rejected.

A company with a travel-and-expense system and audit duties needs that system. For a team that collects receipts in chats today, this puts the receipt, the amount and the decision in one place. If your task is a daily report from people in the field, see daily reports for field teams. The same approve-as-the-answer logic runs the vendor registration form.

Set it up in five steps

  1. In onboarding, or "+ New pipeline" if you already have an account, pick the Expense Report template.
  2. Connect the channel first. Create a private channel for finance and add @easy_post_publisher_bot to it as an administrator with the right to post messages. A private channel has no @name, so enter its numeric Chat ID in the box under "Add a channel if you want to publish" in "Still to do": forward any post from the channel to @userinfobot and paste the number it gives you (it starts with -100). An invite link is refused. Then press "Check that the bot can post" in the "Posting access" row of the pipeline page.
  3. In Form Settings rename the categories and projects, switch Amount to Number and put the currency in its prompt, change the Project skip button, add "Your name" with "+ Add Field" and put its token into the Post Template, and paste the two replies into Approved Message and Rejected Message.
  4. Press "Test the form in Telegram". This links your Telegram, so the cards can reach you. File an expense yourself, with a photo of a receipt, and press Approve once: check the post in the channel and the reply you receive as an employee. Do this only after the channel is connected, because before that the card arrives without buttons.
  5. Add your finance people under Members, each with an Easy Post account and a linked Telegram. Then press "Copy link" under "Send the form to real people" and share it.

New to bots? How to create a Telegram bot without code shows how to make one.

Set up an expense report form in Telegram →

Frequently Asked Questions

Can the form add up my expenses or export them to Excel?
No. Each expense is kept as typed, and the dashboard lists them one by one. To get them into a spreadsheet, add a webhook, which sends every approved expense as JSON to a URL you choose, and have an automation tool write the rows. The amounts arrive as typed text. Webhooks are not included in every plan.
Can employees attach a PDF invoice?
Not in the standard form. The receipt step takes photos only, up to three, and a screenshot sent as a photo works. If you need files, tell support what you need at easy-post.app/support.
Does the form make sure every expense has a receipt?
Not by itself. The step is marked required, but its Done button lets a person go on without a photo. Open the expense in the dashboard before you press Approve, and reject the ones with no receipt.
Who can send expenses?
Anyone who has the link. The form has no list of employees, so the card shows the sender's Telegram name, and your Approve is the check. Add a "Your name" field so you know whom you are paying.
How many expenses can one employee send?
The template allows 10 form starts a day and 50 a month per Telegram account, and abandoned or rejected attempts count too. You change both numbers under Submission Limits in Form Settings.

Related Articles

← Back to Blog