Privacy policy
Last updated: 22 October 2026 · Applies to the beta service at backtester.app
1. Summary
Backtester.app validates Telegram trading signals against historical market data. To do that it must read messages from a Telegram channel. Those messages and the signals extracted from them are temporary: they are processed in an isolated workspace for one job and deleted when that job ends. We keep the account, permission and usage records needed to run the service, and aggregate results. We do not build a database of channel messages or signals.
We do not sell data, run advertising trackers or use third-party analytics. There are no marketing cookies.
2. What we collect
Account data
- Email address, display name, and a password stored only as a salted hash by our authentication library. We never see or store your plain-text password.
- Session records (a session token, expiry, and the IP address and user-agent seen at sign-in) so you can stay signed in and so sessions can be revoked.
- Account status: pending, active, suspended or deactivated; permissions; optional per-account limits; the administrator who activated the account.
Service usage data
- Job records: which channel was selected, the requested date range, queue state, timestamps, attempt counts, progress, a sanitised error code and aggregate result metrics.
- Quota counters: the days, distinct channels and calendar months used by each account.
- Report metadata: report identifier, size, checksum, creation time and expiry. Not the report itself — that stays on the processing node.
- Administrative audit records: which administrator changed which account or setting, and when. These never contain message text or credentials.
- IP addresses are hashed for abuse prevention and audit where they are recorded.
Technical logs
Our edge platform records request metadata (path, status, timing, region) for security and reliability. Application logs are structured and deliberately exclude message text, extracted signals, credentials and tokens. The processing node logs job identifiers, counts, timings and error codes only.
3. Telegram channel content
When you request a backtest, the processing node reads the selected channel using the service’s own Telegram account, limited to the required period. The messages are held in memory and in a private per-job workspace on that node, used to parse signals and simulate trades, and then deleted.
- Raw messages, follow-up links, extracted signals and per-trade simulations are never written to our application database, analytics, permanent logs or backups.
- The workspace is created for the job with restrictive permissions and removed when the job finishes, fails or is cancelled.
- A cleanup process runs continuously and removes workspaces left behind by a crash or an interrupted job, and purge timestamps are recorded.
- Only the selected channel is accessed. We do not read other chats available to the service account, and we cannot access channels the service account cannot read.
Honest limitation: while a job is running, channel content exists on disk on the processing node, and the hosting provider’s infrastructure may retain disk-level snapshots outside our control. “Never stored” would be inaccurate. The accurate statement is: processed temporarily, deleted at the end of the job, and never persisted in our application database.
4. Reports
A completed report contains aggregate metrics and individual simulated trades. A list of trades is derived from the channel’s signals, so it is treated as sensitive. Reports are written to the processing node, served to you through an authenticated endpoint, and deleted at the expiry shown in the dashboard (24 hours by default). You can delete a report earlier from the dashboard. When a report expires, the cleanup process asks the processing node to delete the file and records that it was removed. Report bodies are not stored in our application database.
5. Optional AI-assisted parsing
The deterministic parser is always used first. An optional AI fallback exists for messages the deterministic parser could not read. It is disabled by default and is only enabled for an individual account by an administrator, in addition to a global switch.
- When enabled for your account, the text of unreadable messages and their reply context may be sent to the configured model provider through OpenRouter. Cleanly parsed messages, commentary and unrelated chats are not sent.
- Provider API keys are held as server-side secrets on the processing node, never in the browser, the application database or logs.
- We record token counts and estimated cost per run. We do not store the prompt or the model’s raw answer.
- The provider’s own retention and training policies apply to data it receives. If you do not want this transfer, do not request AI-assisted parsing; deterministic parsing works without it.
If AI-assisted parsing is enabled for your account, the dashboard tells you so. It is not a user-facing setting during the beta.
6. Processors and infrastructure
- Cloudflare — website, API, authentication storage (D1), request routing and the encrypted tunnel to the processing node.
- VPS hosting provider — the processing node that runs Telegram reads, signal extraction and backtests.
- Telegram — channel content is read through a Telegram user session operated by the service.
- Dukascopy — historical bid/ask candle data. No user data is sent.
- OpenRouter and its model provider — only when AI-assisted parsing is enabled for an account.
- Resend — transactional email, if password-reset email is configured.
These providers process data in their own regions. We choose providers that support the service’s security requirements, but we cannot promise a specific storage location for every subprocessor.
7. Cookies
We set one essential cookie: your authenticated session. It is HTTP-only, SameSite=Lax and secure on HTTPS. No analytics, advertising or cross-site tracking cookies are used.
8. Retention
| Data | Retention |
|---|---|
| Account, permissions, audit records | While the account exists, plus a short period for security records after deletion (see the retention schedule). |
| Job metadata and aggregate metrics | Retained while the account exists so you can see your history; removed with the account. |
| Report bodies | 24 hours by default, configurable by the operator, or until you delete them. Never in the application database. |
| Raw messages, signals, per-trade workspaces | Deleted at the end of the job; leftovers removed by the cleanup process. |
| Rate-limit counters | Short-lived windows, discarded automatically. |
| AI token/cost aggregates | Retained as aggregates for budget control; no content. |
9. Security
Passwords are hashed by a maintained authentication library; sessions expire and can be revoked. Administrative routes require an administrator role enforced on the server. The processing node accepts no inbound public traffic: it is reached through an authenticated Cloudflare Tunnel and signed requests. Secrets are stored as server-side secrets, not in the repository or the browser. Access to production resources is limited to the operator.
No system is perfectly secure. If you believe your account has been compromised, contact @backtester_admin immediately.
10. Your choices and rights
You can access and correct your account details in the dashboard, delete individual reports, and request deletion of your account. Depending on where you live, you may have additional rights to access, correct, delete, restrict or object to processing, and to data portability. Send requests to @backtester_admin; we may need to verify that the request comes from the account holder. We respond within the period required by applicable law.
11. Children
The service is not intended for anyone under 18 and we do not knowingly collect data from children.
12. Changes
We will update this policy when the service changes and show the revision date. Material changes will be announced in the dashboard before they take effect.
13. Contact
Privacy questions and requests: @backtester_admin on Telegram. No postal address or legal entity details are published yet; if an entity is established, its details will be added here before any paid service is offered.