You ask, AI answer.
PersonalAccountant centralizes receipt tracking by forwarding transaction emails from multiple accounts to one platform. It extracts key details, sends real-time notifications via Telegram, and lets users ask AI to look up receipts, generate summaries, or even provide daily financial reports, making personal accountant more efficient and automated.
Disclaimer: The whole project is written and optimized by ChatGPT. Feel free to create issue if any and I will ask them to resolve it.
Notification | Queries | Scheduled report |
Transaction emails will be forwarded to a "virtual" email address managed by Cloudflare Email Workers. These emails will then be processed by OpenAI's chat completion API to extract key information, such as the amount
, currency
, and description
. After extracting the details, the workflow will:
- Trigger a notification (currently set to send alerts via Telegram).
- Upload the processed text to the vector database store on the OpenAI platform.
Since the data is stored in a personal vector database, you can make queries by sending a message to your Telegram bot. The bot will then call the Cloudflare worker using a Telegram webhook. These "on-demand" requests will be processed by the OpenAI Assistant.
- A domain hosted on Cloudflare, and don't have any email related DNS records: https://developers.cloudflare.com/email-routing/get-started/enable-email-routing/
- A paid (tier 1 and up) OpenAI account so you can use their
gpt-4o-mini
model: https://platform.openai.com/docs/guides/rate-limits/usage-tiers - A Telegram bot to receive notification and send the queries: https://core.telegram.org/bots/tutorial
To set up the project, follow these steps:
-
Install dependencies: Make sure you have Node.js installed, then run:
bun install
-
Environment Configuration: Create a
.env
file in the project root and configure the environment variables as described in the table below. -
Run the application:
bun run start
or for development:
bun run dev
The application requires the following environment variables:
Variable Name | Description | Required | Default |
---|---|---|---|
TELEGRAM_CHAT_ID |
The chat ID where the Telegram bot will send messages. | Yes | - |
TELEGRAM_BOT_TOKEN |
Token for the Telegram bot. | Yes | - |
TELEGRAM_BOT_SECRET_TOKEN |
Secret token of the Telegram webhook (X-Telegram-Bot-Api-Secret-Token ) |
Yes | - |
OPENAI_PROJECT_ID |
OpenAI project identifier. | Yes | - |
OPENAI_API_KEY |
API key for accessing OpenAI services. | Yes | - |
OPENAI_PROCESS_EMAIL_SYSTEM_PROMPT |
System message to use for email processing in OpenAI. | Yes | - |
OPENAI_PROCESS_EMAIL_USER_PROMPT |
User prompt template for email processing. | Yes | - |
OPENAI_ASSISTANT_SCHEDULED_PROMPT |
User prompt for daily transaction summary | Yes | - |
OPENAI_PROCESS_EMAIL_MODEL |
The model used by OpenAI for email processing. | Yes | - |
OPENAI_ASSISTANT_VECTORSTORE_ID |
The vector store identifier for storing processed data in OpenAI. | Yes | - |
OPENAI_ASSISTANT_ID |
Assistant ID for OpenAI's thread execution. | Yes | - |
- Whitelist email addresses.
- Notify to channel, group chat instead
- Handling Email Data: The application uses
PostalMime
for parsing email data and extracts relevant details for further processing. - Telegram Notifications: Messages are sent to a specified chat using the
Telegraf
library, and markdown formatting is used for message content.