🔒

Privacy Policy

Effective date: October 9, 2026

We collect only what's needed. We never sell your data.

📋

Overview

This Privacy Policy explains what data Letterboxd Tracker Bot ("the Bot", "we", "our") collects when you add it to a Discord server or interact with its commands, how that data is used, how long it is kept, and what controls you have over it. We are committed to collecting only the minimum data necessary to operate the Bot's features.

📥

Data We Collect

All data is stored in a private SQLite database. Here is exactly what is stored and why:

Server (Guild) Configuration

  • ▸ Discord server (guild) ID, the date the Bot joined, and the server name (used in global stats only if you allow it)
  • ▸ Channel IDs you configure: diary, commands, recap, sharelink, changelog and audit-log channels
  • ▸ Custom embed colour, ping role, Top Watcher role, and a Discord invite link you optionally set with /setdiscordlink
  • ▸ Diary and film display toggles, custom label names, timestamp style, review length, watch filter and auto-thread options
  • ▸ Anonymity / privacy toggles (whether your server name and tracked usernames appear in global stats)
  • ▸ Weekly / monthly recap schedule, milestone announcements, quiet hours, and which sharelink platforms are offered
  • ▸ Permission group assignments and per-command overrides (admin / mod / user)
  • ▸ An /exportconfig share code holding a copy of your display settings (no channel IDs, role IDs or tracked users)

Purpose: To deliver diary posts, recaps and responses to the correct channels with your chosen settings.

Tracked Letterboxd Usernames

  • ▸ Letterboxd usernames added via /adduser, the server they belong to, and when they were added
  • ▸ The Discord User ID of who added the user, and the Discord member linked to each tracked username (one Letterboxd account per member per server)
  • ▸ Per-username polling state (last activity time, next check time, failure counts) used for adaptive scheduling, and the progress of the one-time history import for each username. Both are deleted once no server tracks the username any more.
  • ▸ Usernames whose feed keeps failing (for example a renamed or deleted account), so the server can be notified in its audit-log channel

Purpose: To know which Letterboxd accounts to poll and where to post new diary entries.

Diary Entry Activity

  • ▸ IDs of diary entries that have already been posted, stored for 14 days to prevent duplicate posts
  • ▸ Per-entry statistics (film title, slug, year, TMDB ID, rating, liked, rewatch flag, watched date, primary genre, director, review length in characters, username, server ID) used for /stats, /compare, /recap, /profile and /whowatched. The review text itself is not stored.
  • ▸ Backfilled film history read from each tracked user's public Letterboxd profile, used to power statistics and filters
  • ▸ The dates you logged something (no content, just the day) to count daily streaks
  • ▸ Full diary entry data temporarily stored for failed-post retries, automatically deleted after 7 days if the post cannot be delivered

Purpose: Deduplication, server statistics, streaks, filters, and reliable delivery via retry.

Public Profile Snapshots

  • ▸ Once a day, the public counters on each tracked Letterboxd profile: films watched, films this year, hours, reviews, followers, following, watchlist and list counts

Purpose: The /profile Stats tab (weekly changes) and milestone shout-outs. Daily snapshots are kept for 90 days; after that only the snapshot from the 1st of each month is kept, so long-term milestones keep working. All snapshots for a username are deleted once no server tracks it any more.

Recaps & Leaderboards

  • ▸ A copy of each posted weekly and monthly server recap (the newest 10 of each kind per server), so /serverrecap can show them again
  • ▸ Monthly global winners, frozen once a month ends: top watcher (username, or "Watcher #NNNN" if anonymous), top server, top film and trending film. Anonymity is re-checked each time they are shown, so turning on /anonymous later also hides your past wins.
  • ▸ Last month's Top Watcher per server, so the optional Top Watcher role can be moved to the new winner

Purpose: /serverrecap, the monthly winners pages in /stats, and the Top Watcher role.

Your Account Choices

  • ▸ Verification: when you run /verify, your Discord User ID, the Letterboxd username and a short code (valid for 15 minutes). Once verified, the Discord ID to Letterboxd username link is kept bot-wide until you run /unverify.
  • ▸ Anonymous mode: whether you chose /anonymous to appear as "Watcher #NNNN" in global stats.
  • ▸ Opt-outs: when you run /opt-out, your Discord User ID, the server, and the Letterboxd name you had, so nobody can add you again until you run /opt-in.
  • ▸ Sharelinks: the profile usernames you submit with /sharelink (Letterboxd, Serializd, Backloggd, Goodreads, Instagram, YouTube and similar), your display name, and the ID of the message posted for you.

Purpose: To respect the choices you make about how the Bot treats your account.

Settings Audit Log

  • ▸ A log of admin setting changes, including: guild ID, the Discord User ID and display name of who made the change, the setting name, old value, new value, and timestamp. Entries are automatically deleted after 90 days.

Purpose: Allows server admins to audit configuration changes via /auditlog and, if set, the audit-log channel.

Command Usage Statistics

  • ▸ Server ID, command name, Discord User ID, and timestamp for each command invocation, automatically deleted after 1 year
  • ▸ Short-lived cooldown and rate-limit counters (cleared within a day)

Purpose: Abuse protection and internal analytics to understand feature usage and improve the Bot. This data is not shared externally.

Reports

  • ▸ When you send a /report, its category and text plus your Discord User ID, name and avatar are delivered to the developer's private report channel
  • ▸ If someone abuses /report, their Discord User ID may be muted or banned from reporting

Purpose: To answer bug reports and support requests. One report per category per user every 24 hours.

Operational Logs

  • ▸ Errors tied to a tracked username or server (for example a feed that could not be read), kept for 30 days
  • ▸ Warning and error log lines from the Bot itself, kept for 30 days
  • ▸ A history of which usernames stopped being tracked in which server, kept for about 13 months (400 days) for year-over-year growth figures
  • ▸ A log of when the Bot joined or left each server, with the server ID and member count at that time
  • ▸ Daily bot-wide totals (number of servers, tracked users, entries, films) with no personal data

Purpose: Keeping the Bot healthy, debugging problems, and seeing how the Bot grows over time. Only the developer can see these.

TMDB Cache

  • ▸ Film metadata from The Movie Database (TMDB): title, year, poster & backdrop URLs, trailer link, director, genres, runtime, overview, language, country, tagline, cast, and TMDB vote averages

Purpose: Reduces redundant calls to the TMDB API. Film entries are removed after 1 year without use and search results after 30 days. No personal data is involved.

🚫

What We Do NOT Collect

  • ▸ Message content or conversation history from your Discord server.
  • ▸ Passwords, authentication tokens, or any credentials.
  • ▸ Private Letterboxd account data - only publicly visible diary entries and profiles are accessed.
  • ▸ IP addresses or device information.
  • ▸ Payment or financial data of any kind.
  • ▸ Email addresses.
🔗

External Services We Contact

The Bot communicates with the following external services to function. All connections are over HTTPS.

Letterboxd.com

The Bot reads each tracked user's public Letterboxd RSS diary feed to check for new entries, and reads public profile pages for film history, profile counters, watchlists, and lists. For /verify it reads your public profile bio to find the code. It sends only the Letterboxd username and receives publicly available data (film title, rating, like, rewatch flag, review text, watched date). Review text is shown in the diary post; it is only held in the database while a failed post is being retried (up to 7 days). No authentication credentials are sent. The Bot retries failed requests with backoff and respects rate-limit (HTTP 429) responses.

TMDB (The Movie Database)

Film titles are sent to the TMDB API to retrieve metadata such as posters, synopsis, cast, director, genres, runtime, and ratings. Results are cached to minimise repeated calls. This product uses the TMDB API but is not endorsed or certified by TMDB.

Discord API

All standard Discord bot communication is performed through Discord's official API in accordance with Discord's Privacy Policy.

Developer Monitoring

To keep the Bot running smoothly, the developer receives automated alerts for things like servers joining or leaving, users being added or removed, API errors, and rate-limit warnings. These include basic info such as server name and member count. When a tracked username keeps failing, the developer may be asked to check whether it was renamed, deleted or made private. The developer also has a private, login-protected dashboard showing the same operational data. This data is used only for operational health checks and moderation and is never shared with anyone.

🗂️

Data Retention

Cleanup runs automatically every day. Here is how long each kind of data is kept:

15m

Minutes - Verification Codes

An unused /verify code expires after 15 minutes and is then deleted.

7

Days - Failed Post Retry Buffer

Diary entries that couldn't be delivered are held for up to 7 days while the bot retries, then automatically deleted.

14

Days - Posted Entry IDs

Diary entry IDs used for duplicate detection are purged after 14 days, or straight away when the username stops being tracked in that server.

30

Days - Error Logs & Film Search Cache

Per-user error logs, the Bot's own warning log, and cached film searches are deleted after 30 days.

90

Days - Settings Audit Log & Daily Profile Snapshots

Settings audit log entries are deleted after 90 days. Daily public profile counters are thinned after 90 days to one snapshot per month (the 1st), which is kept for long-term milestones while any server still tracks the username. These are public numbers only.

1y

Year - Command Usage & Film Cache

Command usage records are deleted after 1 year. Cached TMDB film data is deleted after 1 year without being used (no personal data).

48h

Hours - After Bot Removal

All data tied to a server (tracked usernames, linked members, settings, film stats, streaks, recaps, sharelinks, opt-outs, audit and usage logs, share codes, etc.) is permanently and automatically deleted 48 hours after the Bot is removed from that server. If the Bot is re-added within that window, nothing is lost.

⏹

Immediately - When Tracking Stops

When a username is removed with /removeuser, /clearallusers or /opt-out (or the linked member leaves the server), its film stats, streak days, posted entry IDs, retry queue and error flags in that server are deleted right away. If it is added again later, it starts fresh and only the latest entry is posted. When the last server stops tracking a username, its polling state, history import progress and profile snapshots are deleted too. A member who leaves a server also has their sharelink entry there deleted; the message the Bot already posted in the sharelink channel stays.

∞

Kept On Purpose

Server settings, role settings, tracked usernames and their film history are kept while the Bot remains in your server and the username is tracked. A verified account link (and anonymous mode) stays until you run /unverify. An opt-out record stays until you run /opt-in, so you can't be re-added. Past monthly winners stay as history (shown as "Watcher #NNNN" if the person is anonymous). The removal history (server ID and username) is kept for 400 days, only for growth charts. The server join/leave log and bot-wide totals are kept as long-term history.

🛡️

Your Privacy Controls

The following built-in commands give you control over your data. The member commands (/privacy, /opt-out, /opt-in, /verify, /unverify, /anonymous and /report) always work, even if a server restricts other commands.

For every member

/privacy

Shows a short summary of what the Bot stores, right inside Discord.

/opt-out

Stops tracking every Letterboxd account linked to you in that server, deletes its stats there, and blocks anyone from adding you again.

/opt-in

Removes your opt-out so you can be tracked again.

/verify

Proves you own a Letterboxd account and locks it to your Discord account, so nobody else can link it.

/unverify

Deletes your verification and turns anonymous mode off.

/anonymous

Verified users can show as "Watcher #NNNN" in global stats and leaderboards. Inside your own server your real name is still shown.

/sharelink edit

Updates the profile links you shared. A moderator can clear them with /sharelink clear.

/report

Contacts the developer directly, including for data deletion requests.

For server staff

/listusers

Lists all Letterboxd usernames currently being tracked in your server.

/removeuser

Stops tracking a username and deletes its stats, streaks, posted entry IDs and pending posts in your server. /clearallusers does this for everyone.

/setanonymous

Hides your tracked usernames and/or your server name in global statistics. Also available in /settings.

/auditlog

Reviews the recent history of admin setting changes for your server.

A linked member who leaves a server is automatically untracked there, and their sharelink entry is deleted. Discord only tells the Bot about leaves while it is online, so if someone left during downtime, staff can remove them with /removeuser. To delete all data for your server, simply remove the Bot - everything tied to the server is purged within 48 hours. For individual deletion requests (for example your verification or profile snapshots) or any other privacy concern, use /report or contact us via our support server.

📊

Global Statistics

The /stats command shows global statistics and leaderboards aggregated across all servers using the Bot: top watchers, top films, top servers and monthly winners. Each Letterboxd account is counted once, even if it is tracked in several servers.

  • ▸ Server names are hidden by default and show as "Guild #NNNN". Admins can choose to show the name (and an invite link set with /setdiscordlink).
  • ▸ Tracked Letterboxd usernames may appear on global boards unless the server hides them with /setanonymous, or the member uses /anonymous after verifying.
  • ▸ Anonymous labels use a one-way hash, so they never reveal part of a real ID.
  • ▸ The developer may exclude or anonymize servers and usernames on global boards, for example offensive names.

Any usernames or activity shown reflect publicly available Letterboxd data.

🔐

Security Practices

  • ▸ All external API requests use HTTPS with compression where available.
  • ▸ The database uses prepared statements to prevent SQL injection.
  • ▸ The database uses WAL (Write-Ahead Logging) mode with automatic rollbacks on errors.
  • ▸ Rate limiting is enforced per-user, per-guild, and globally to protect against abuse.
  • ▸ A circuit-breaker system prevents cascading failures from API outages.
  • ▸ Sensitive configuration (tokens, webhook URLs, API keys) is stored as environment variables, never in the database.
📝

Changes to This Policy

We may update this Privacy Policy from time to time. When we do, we will update the effective date at the top of this page. We encourage you to review this page periodically. Continued use of the Bot after changes are posted constitutes your acceptance of the revised policy.

✉️

Contact & Data Requests

For privacy questions, data deletion requests, or any other concern, please reach out via our Discord support server:

Join Support Server →

Your privacy, your choice.

We collect only what's necessary. Add the bot and track your films with confidence.