Privacy Policy
Last updated:
This Privacy Policy explains how MadeSpent (“MadeSpent”, “we”, “us” or “our”) collects, uses and protects your information when you use the MadeSpent web app at madespent.com, its public pages, its leaderboard and its MCP server for AI assistants (together, the “Service”).
We built MadeSpent to collect as little as possible. You type your numbers yourself or, only if you choose to, bring them in as monthly totals from a file you import or a payment provider you connect. We never connect to your bank, we never post to X for you, we never sell your data, we run no advertising, and we only measure the audience of the public pages, without cookies and in aggregate.
MadeSpent is published by Adam ALET EI (see “Editor and Contact” below). We are the data controller for the personal data described in this policy.
This policy covers the hosted Service at madespent.com only. Anyone who runs their own instance of MadeSpent from its source code is responsible for the data on that instance.
1. Information We Collect
Your X account
You sign in to MadeSpent with your X account (OAuth 2.0). We only ask X for read access (users.read, tweet.read and offline.access). We never ask X for your email address, we never read your posts or messages, and we never post for you.
When you sign in, X sends us the following, which we store:
- Your X user ID.
- Your display name.
- Your X username (@handle).
- The address of your X profile picture.
We refresh your display name, username and profile picture every time you sign in with X, so your MadeSpent profile stays in line with X.
X also sends sign-in tokens. We use them once, during sign-in, to read the profile information listed above, and we don’t keep them: our database clears them as soon as they would be written.
Account setup
- Handle. Your public address, madespent.com/<handle>. We suggest your X username and you can change it. We keep your previous handles so that old links still lead to your page.
- Preferred currency. The currency your totals are shown in.
- Email address (optional). We only ask for it if you turn on the monthly reminder email (it is off by default). If you give one, we use it for that reminder and, if your account becomes inactive, for one warning before we delete it (see “Data Retention”). You can remove it in Settings › Reminders while the reminder is off.
- Reminder setting. Whether the reminder is on or off, and a record of the months we sent you one.
- Account activity. The date you last signed in, used the app or had an AI assistant act for your account (updated at most once a day), and, if it comes to that, the date we warned you about the deletion of an inactive account. We use them only to delete accounts that are no longer used.
What you enter
- Your income and expense lines for each month: label, amount, currency, month, and whether the line is hidden or visible.
- Your projects, and how each line is split between them.
- Your recurring expenses, and the months you have prepared.
- Your milestones: date, title, optional emoji and optional link.
- Your public profile: bio, plus links with a label and a URL.
- Your publication settings: public or private, the last month you published, and whether you appear on the leaderboard.
This is information about your business activity, and you decide what to enter. Please don’t put other people’s personal information or sensitive information in labels, titles or your bio.
Income sources you connect (optional)
In Connections, you can bring your revenue and fees in from the tools you sell with. This is optional: you can always type every line yourself.
- Connected providers. You can connect Stripe, RevenueCat, Polar, Paddle, Lemon Squeezy or Gumroad with an API key you create at that provider. To check the key, and then about once a day and when you click “Sync now”, our server reads from the provider, for the months concerned: your sales, orders, transactions, refunds, disputes and fees (for RevenueCat, its monthly revenue chart), the names of your products and apps, and the name and identifier of the account, store, organization or project the key belongs to. Some of these answers also contain details of individual sales, sometimes about your buyers (such as a name, an email address or a country). We don’t use or keep them: each answer is added up in memory into monthly totals, then discarded.
- Imported files. You can import a CSV file: an export from Stripe or RevenueCat, an App Store Connect sales report, a Google Play earnings report, or any spreadsheet. The file is read on our server, in memory, then forgotten: we never store it, and keep only the monthly totals it gives.
For each source, we store:
- Its name and provider, its settings (whether it adds automatically, whether it splits by product, and which project each product, app or account goes to), the name and identifier of the account it reads, your product names, the date of its last sync, and a short error code when a sync fails (such as “key revoked”).
- Its proposals: monthly totals by month, type (income or expense), product, app or account, and currency, each with a label and its status (to review, added, ignored, or amount changed). We never store an individual sale, payment or refund. Labels come from your product names or, for a spreadsheet, from the column you choose: please don’t choose one that names your buyers.
- Its activity log: imports, and the proposals added (by you or automatically), updated or ignored, with their month, amount and label. It keeps the last 500 entries of each source.
- For a connected provider, your API key, encrypted by our server (AES-256-GCM) before it reaches our database. We never show it again, send it back to your browser, write it to our logs or include it in your data export.
A line you add from a proposal becomes a line of your sheet like any other, marked with its source while the source stays connected.
Technical and security data
- Sessions. When you sign in, we create a session in our database. It records the IP address and browser (user agent) of your device, and when the session started and when it expires. We use it to keep you signed in and to protect your account. A session expires after 60 days without use, and we delete expired sessions every day. Your data export also lists your active sessions.
- Sign-in rate limiting. To stop abuse, our authentication service briefly records the IP address of each sign-in request together with the page requested. These records are deleted within a day at the latest.
- AI assistant connection limits. When an assistant app registers or asks to connect, we store a keyed hash of the requesting IP address, never the address itself, to enforce request limits.
- Hosting logs. Our host, Vercel, processes technical request data (IP address, user agent, requested URL, time) to deliver the Service, and keeps it in short-lived logs under its own retention rules.
- Audience measurement of the public site. On the home page, the leaderboard, the legal pages and the creators’ public pages only, we count visits with Vercel Web Analytics: the page visited (without its query string), the referring site, the country and region, and the type of device, operating system and browser. It uses no cookie and stores nothing on your device. Visits are told apart by a hash of the request that Vercel discards after 24 hours, and we only see aggregated statistics, never an individual visitor. Nothing is measured inside the app (your sheet, settings and other signed-in pages) or on the sign-in page.
AI assistant connections (optional)
If you connect an AI assistant, such as Claude, ChatGPT or Cursor, to the MadeSpent MCP server, we store:
- The name and identifier of the assistant app, and the address it returns to after you approve it.
- The access level you granted (read, or read and write), and when you approved and revoked it.
- Its access tokens, as hashes only, never in readable form.
- A log of each action the assistant took: the tool name, its arguments (with texts shortened), the outcome and the time. Confirmation tokens and technical keys are never logged.
Data an assistant reads from MadeSpent is sent to that assistant and to the company that provides it, under that company’s own terms.
Emails you send us
When you write to us, we receive your email address and your message.
What we don’t collect
We don’t collect payment card details, bank connections or bank data, your X email address, X posts, X messages, contacts, precise location, advertising identifiers, or any identifier that follows you across sites. From the income sources you connect or import, we keep no individual sale and no details about your buyers.
2. Public Data You Choose to Publish
Your page is private by default. Nothing becomes public unless you publish it.
Public page. Once you publish, anyone can see the following at madespent.com/<handle>, and search engines can index it:
- Your handle, display name, profile picture, bio and links.
- For each month up to the last one you published: your visible lines with their labels and amounts (shown in US dollars, converted at the European Central Bank’s monthly average rate), the projects named in those lines, your milestones, and your totals.
Lines you mark as hidden are never shown one by one. They are merged into a single “Other” line per month, with no label. A hidden line can still count in the chart of a project that is already shown publicly.
Line details. You can turn off “Show line details on my public page” in Settings › Public page. Your page then shows only your totals, your charts (by project too) and your milestones: no line and no label leaves our database for it, every line being merged as hidden lines are.
Income sources. Nothing from an income source becomes public on its own. Proposals are never shown publicly. A line added from one is a line like any other: it appears on your page only in a month you published, and never on its own if you hide it. Your page never says which source a line came from.
Preview image. We generate a preview image of your page that shows your figures and profile picture. When you share your link on X or anywhere else, that platform may fetch and keep a copy of it.
Leaderboard. You only appear on the leaderboard if you opt in and your page is public. It shows your handle, display name, profile picture and the figures of your last published month, in US dollars.
Posts on X. MadeSpent writes a post and a reply for you to copy. You publish them yourself, from your own X account.
Unpublishing. You can unpublish your page or leave the leaderboard at any time in Settings › Public page, and the change takes effect on MadeSpent right away. We can’t control copies others have already made, such as search engine caches, screenshots or link previews on X.
Profile pictures. Your profile picture comes from X, but visitors never load it from X: madespent.com serves it. Our server fetches the picture from X’s image server (pbs.twimg.com) without any information about the visitor, keeps a copy in its cache for a few days, and shows it on your public page and the leaderboard while your page is public. If your page is private, only you see your picture, in the app.
3. How We Use Your Information and Legal Bases
If you are in the European Economic Area or the United Kingdom, these are our purposes and the GDPR legal bases we rely on for each:
- Providing the Service. Your account, sheet, totals, projects, charts and data export. Basis: performance of a contract (Art. 6(1)(b)).
- Publishing your page and listing you on the leaderboard, at your request. Basis: performance of a contract. You can undo either at any time.
- Sending the monthly reminder email. Basis: your consent (Art. 6(1)(a)). You can withdraw it at any time with the one-click unsubscribe link in each email or in Settings › Reminders.
- Connecting an AI assistant and carrying out its actions, at your request. Basis: performance of a contract.
- Importing your files and syncing the income sources you connect, at your request. Reading your data at the provider with the key you gave us, turning it into monthly proposals, and keeping the source, its proposals, its activity log and its encrypted key while it stays connected. Basis: performance of a contract.
- Logging those actions. Basis: our legitimate interests in security and in letting you see what an assistant did (Art. 6(1)(f)).
- Measuring the audience of the public site, without cookies and in aggregate, to know which pages are read and where visitors come from. Basis: our legitimate interests (Art. 6(1)(f)).
- Keeping the Service and your account secure and available. Sessions, rate limiting, hashed IP addresses, abuse prevention and backups. Basis: our legitimate interests.
- Deleting accounts that are no longer used, and warning you first. Your last activity date, and one email 30 days before the deletion if you gave an address. Basis: our legitimate interest in, and our legal obligation of, not keeping data longer than needed (Art. 5(1)(e) and 6(1)(f)).
- Answering your messages. Basis: our legitimate interests, or the performance of a contract.
- Meeting legal obligations. For example, answering lawful requests from authorities or handling reports of illegal content. Basis: legal obligation (Art. 6(1)(c)).
We make no automated decisions that have legal or similarly significant effects on you. The leaderboard is a ranking of figures you chose to publish.
4. Third-Party Services
We rely on a small number of providers, each acting under their own privacy policy:
- Vercel (Vercel Inc., United States): hosting and delivery of the website and server functions, and cookieless audience measurement of the public pages (Vercel Web Analytics). Our functions run in Frankfurt, Germany, and pages are delivered through Vercel’s global network. Privacy policy (opens in a new tab).
- Neon (Databricks, Inc., the parent company of Neon, LLC, United States): our Postgres database, hosted on Amazon Web Services in Frankfurt, Germany (eu-central-1). Privacy notice (opens in a new tab).
- Resend (Plus Five Five, Inc., United States): sends the reminder emails and the warning before an inactive account is deleted, from resend.madespent.com. Privacy policy (opens in a new tab).
- GitHub (GitHub, Inc., a Microsoft company, United States): runs our daily database backup and stores the result for 30 days. Each backup is encrypted as it is made, with a key GitHub does not have, so GitHub never stores it in readable form. Privacy statement (opens in a new tab).
- X (X Corp., United States; X Internet Unlimited Company, Ireland, for users in the European Union, the EFTA states and the United Kingdom): sign-in, and the source of the profile pictures shown on MadeSpent, which our server fetches from X and serves itself, so X receives no information about your visitors. X is an independent controller for your X account. Privacy policy (opens in a new tab).
- DuckDuckGo (United States): our server fetches the icons of the websites in your profile links from DuckDuckGo’s icon service. DuckDuckGo only receives the website’s domain name, such as example.com, and never any information about you or your visitors.
- Frankfurter (api.frankfurter.dev): provides the European Central Bank’s reference exchange rates. We send it no personal data.
- Your AI assistant’s provider (for example Anthropic, OpenAI or Anysphere): only if you connect an assistant. It receives what the assistant reads from MadeSpent, as an independent controller, under its own terms.
Income sources you connect are not our providers. Stripe, RevenueCat, Polar, Paddle, Lemon Squeezy and Gumroad are not processors of MadeSpent: you choose to connect them, with your own account there and a key you create. When you do, MadeSpent acts on your behalf, reading your own data from the provider you connected, and that provider handles your data under its own terms and privacy policy. The same goes for App Store Connect, Google Play or any other tool whose export you import: we only receive the file you upload.
5. Data Sharing
We do not sell your personal data, and we never share it for advertising. We share data only with the providers listed above, strictly to run the Service, and when the law requires it. When you connect an income source, our server sends that provider only your key and read requests (which months and pages to read), nothing else about you. Anything you publish is visible to everyone, as described in section 2.
6. International Data Transfers
Our database is hosted in the European Union (Frankfurt, Germany). Some of our providers are US companies or process data outside the European Economic Area (EEA): Vercel, Neon, Resend and GitHub. When personal data is transferred to a third country, we rely on a valid GDPR Chapter V transfer mechanism, so that your data keeps an equivalent level of protection: the European Commission’s adequacy decision for the EU-U.S. Data Privacy Framework, to which Vercel, Neon, Resend and GitHub state that they adhere, and/or Standard Contractual Clauses. When you sign in with X, you deal with X directly, as an independent controller. Likewise, an income source you connect keeps your data wherever it is based, under its own terms: our server only reads from it, at your request.
8. Data Retention
- Account data and everything you entered: kept while your account exists. Deleted immediately when you delete your account.
- Sessions: a session expires after 60 days without use. It is deleted when you sign out on that device, within a day after it expires, or when you delete your account.
- X sign-in tokens: not kept. They are used once, during sign-in.
- Sign-in rate limiting records: deleted within a day at the latest.
- Audience measurement: the visit hash is discarded by Vercel after 24 hours; the aggregated statistics are kept for up to 12 months.
- Temporary sign-in data (sign-in state, assistant connection requests): from 5 to 30 minutes.
- AI assistant action log: 90 days. Older entries are deleted every day, and the whole log is deleted with your account.
- AI assistant tokens and connection records: access tokens last 1 hour and refresh tokens 30 days. Their records are deleted about 30 days after they expire (we check every day), or immediately when you delete your account.
- Income sources, their proposals, product mapping and activity log: kept while the source is connected. The activity log keeps the last 500 entries of each source. Disconnecting a source deletes it at once, with its key, all its proposals (to review, added or ignored), its mapping and its activity log; the lines you already added stay in your sheet as ordinary lines. Everything is deleted with your account.
- Provider keys: kept, encrypted, while their source is connected; overwritten when you give a new key. Deleted immediately when you disconnect the source or delete your account. A backup may hold the encrypted key for up to 30 days, unreadable without our encryption key, which backups don’t contain. You can also revoke the key at the provider at any time.
- Imported files: not kept. Read in memory, then forgotten; only their monthly totals are kept, as above.
- Reminder records (which month a reminder was sent): kept while your account exists.
- Former handles: kept while your account exists, so that old links redirect. When you delete your account, your current and former handles are kept on a reserved list, with no other data attached, so that nobody can take over your address and impersonate you.
- Backups: encrypted, kept for 30 days. Our database host can also restore the last 6 hours. Data you delete may therefore stay in a backup for up to 30 days before it disappears for good.
- Emails you send us: kept only as long as needed to answer you.
- Inactive accounts: if you don’t sign in, use the app or have an AI assistant act for your account for 3 years, we delete your account and all its data, as if you had deleted it yourself (your handles stay reserved, as above). If you gave us an email address, we send you one warning 30 days before, and we never delete your account less than 30 days after that warning. Signing in before then keeps your account and starts the count again.
9. Data Security
Your data is stored in a database that only our server can reach, over encrypted connections (HTTPS/TLS). Each account can only read its own data, enforced by row-level security in the database. Sessions are checked against the database on every request, so a session that is signed out or deleted stops working at once. Assistant tokens and sign-in links are stored as hashes. The API keys of the income sources you connect are encrypted with AES-256-GCM before they reach the database, with an encryption key kept apart from it; only the sync decrypts them, on our server, and only to send read requests to their provider. Where a provider offers keys limited to reading, we ask you for one. Lemon Squeezy and Gumroad offer none, so a key you create there could also make changes to your account: we only ever use it to read. Backups are encrypted while they are being made, before they are stored, with a key kept offline. No method of transmission or storage is completely secure, but we take reasonable measures to protect your information.
10. Your Rights
Subject to applicable law, you have the right to access, correct, export and delete your personal data, to restrict or object to certain processing, and to withdraw your consent at any time. If you are in France, you can also give instructions about what happens to your data after your death.
You can do most of this yourself, at any time:
- Export your data: Settings › Data & account › Export my data. You get a JSON file with your profile (with your email address if you gave one, and your last activity date), entries, projects, recurring expenses, milestones, links, reminder records, former handles, assistant connections and their action log, income sources (never their keys) with their mapping, proposals and activity log, and your account details (X username, profile picture, active sessions with their IP address and browser).
- Correct your data: edit it directly in the app.
- Delete your account: Settings › Data & account › Delete my account. Your profile, public page and all your data are deleted immediately, except as described in “Data Retention”.
- Stop the reminder: use the one-click unsubscribe link in any reminder email, or Settings › Reminders.
- Unpublish your page, hide its line details or leave the leaderboard: Settings › Public page.
- Disconnect an AI assistant: Settings › Agents.
- Disconnect an income source: Connections, then Disconnect in the source’s menu. Its key is deleted at once; you can also revoke it at the provider.
- Remove MadeSpent’s access to your X account: in your X settings, under connected apps.
For anything else, or if you can no longer sign in (for example because your X account is no longer available), contact us at adam@resend.madespent.com. We answer within one month. If you are in the EU, you also have the right to lodge a complaint with your local data protection authority. In France, that is the CNIL (opens in a new tab).
11. Children’s Privacy
MadeSpent is not directed to children under 16, and you must be at least 16 to use it (see the Terms). We do not knowingly collect personal data from children under 16. If you believe a child has given us personal data, please contact us and we will delete it.
12. Changes to This Policy
We may update this Privacy Policy from time to time. When we make material changes, we will update the “Last updated” date above and, where appropriate, let you know in the app. Your continued use of MadeSpent after the changes take effect means you accept the updated policy.
13. Editor and Contact
MadeSpent is published by Adam ALET EI, a sole proprietorship (entreprise individuelle) registered in France (SIRET 830 658 597 00026), based in Paris, France. Director of publication: Adam Alet.
This website is hosted by Vercel Inc., 440 N Barranca Ave #4133, Covina, CA 91723, USA (vercel.com (opens in a new tab)). See our Legal Notice for the full details.
For any question about this policy or your personal data, contact us at adam@resend.madespent.com.