Skip to main content

Legal

Privacy Policy

Effective

This Privacy Policy describes what information FF Beacon, operated by Michael Walsh ("we", "us"), collects when you visit the site, why we collect it, who we share it with, and the choices you have. We collect the minimum needed to make the product work.

The short version: most of FF Beacon works without an account and without you telling us anything. We do not sell your data and we never see your card number. Any ad you see on the site is served by Google, and the Advertising section below says exactly what that involves and how to switch personalized ads off. Questions or requests go to michael@ffbeacon.com.

1. Information we collect

Account information

When you sign in we receive a unique identifier and email address from the authentication provider you choose (currently Google or Discord; an email-link option may also be available). We do not receive or store your password.

Profile information

With your consent we may receive your display name and avatar from the OAuth provider. From Google: name, email, profile picture (scopes openid email profile). From Discord: username, avatar, and the email associated with your Discord account (scopes identify email). We do not access your Google Drive, Gmail, calendar, contacts, or any Discord server or message content.

Preferences and product data

We store the choices you make inside the product: your default fantasy format, default data source, theme, optional Sleeper username (for league sync), favorite players, custom rankings order, vote history on matchups and in the games, and email digest opt-in.

Content you post

If you claim a Signal profile we store its handle, display name, avatar, and anything you post to it, including uploaded images (held in Supabase Storage). A Signal profile is public: its contents can be read by anyone and indexed by search engines. We also store questions you send through the guide and contact forms, along with any name or email address you choose to include with them.

Sleeper league data

When you enter a Sleeper username, we pull and cache the public data Sleeper exposes for those leagues: league metadata, rosters, matchups, transactions, drafts, traded picks, and the display names of users within those leagues. This data is already public on Sleeper and remains visible to other members of the same league inside our product. Note that entering someone else's Sleeper username in a tool causes us to fetch their public league data too; only do that where it is appropriate.

Ranking boards

Ranking boards saved to an account with Beacon Ranker are combined each night into community rankings for their format. Those rankings are an aggregate: the community page shows the merged order and how many boards ranked each player, and never shows an individual board, a name, or an account. A board can be left out by turning off its "Include in community rankings" switch. Boards built without an account are deleted within 48 hours of their last change.

Assistant questions

When you ask BEAM a question, we log the question so we can see what the assistant could not answer and improve it. The text is scrubbed of things that look like contact details or long digit strings before it is stored, and it is linked to your account only if you were signed in. BEAM answers from our own data with our own code; your question is not sent to an external language model provider.

Donations

Donations are processed by Stripe, PayPal, or Venmo. Your card number, wallet token, and bank details go to that processor and never to us. We do not store any payment instrument. If you were signed in we pass Stripe your email address so it can prefill its own form.

When a donation through Stripe completes, Stripe notifies our server and we send you a receipt by email. To do that we keep one record per donation containing the amount, the Stripe identifiers for the payment, which page the donation started from, and whether the receipt was sent. That record deliberately does not include your email address, your name, your billing address, or anything about your card. Your email address is read from Stripe's notification, used to address the receipt, and then discarded. Stripe keeps the full record of the payment, including your details, under its own policy, and the same is true of PayPal and Venmo if you use those instead.

Cookies and similar storage

We use first-party cookies and similar browser storage to keep you signed in (Supabase auth cookies), to remember your format and source preferences across visits, to hold a guest identifier so a game can tell whether you have already voted, to cache transient interface state, and, for five minutes after you sign in, to tell the next page to report that sign-in to Google Analytics.

We do not build cross-site profiles of you ourselves. The one third party that sets cookies in your browser here is Google, for two separate reasons: Google Analytics, described in the Analytics block below, and advertising, when an ad is served, described in the Advertising block just below. You can clear our cookies at any time from your browser settings; clearing them signs you out and resets your preferences.

Advertising

FF Beacon is free to use, and advertising is how the hosting bill gets paid. Any ads on the site are served by Google AdSense. When an ad is shown, third-party vendors, including Google, use cookies to serve ads based on your prior visits to this website or to other websites. Google's use of advertising cookies enables it and its partners to serve ads to you based on your visit to this site and other sites on the Internet.

You can opt out of personalized advertising by visiting Google's Ads Settings (opens in a new tab). You can also opt out of some other third-party vendors' use of cookies for personalized advertising at www.aboutads.info/choices (opens in a new tab). Opting out does not remove ads; it stops them being chosen from your browsing history.

Google explains what it collects when it serves an ad on a site like this one at How Google uses information from sites or apps that use our services (opens in a new tab). The ad technology providers Google may work with are listed at Google's ad technology providers page (opens in a new tab). We do not pass Google your name, your email address, or anything else that identifies you; what an ad request carries is what your browser sends to any website (an IP address and browser details) plus the page you are on.

Technical and abuse-prevention data

Our hosting provider (Vercel) automatically logs basic request information, including IP address, user agent, request path, and response status, for security and operational troubleshooting.

Some public endpoints are rate limited so one visitor cannot exhaust them. Where you are signed in, the limit is counted against your account identifier. Where you are not, we count it against a salted one-way hash of your IP address. We store the hash, not the address, and the hash cannot be reversed back to an IP.

Analytics

We use Google Analytics, which sets cookies. Two of them, one named _ga and one whose name starts with _ga_ followed by our property code, hold a random identifier for your browser, so Google Analytics can tell a returning visitor from a new one, and they expire two years after your last visit unless you clear them. With them, Google Analytics records the pages you view, including each page's address and title. Some of those contain identifiers: a league's name and number on league pages, a public Sleeper username you looked up in Manager Pulse, or the handle of a public profile you visited. It also records the page you arrived from, your device type, browser and operating system, and an approximate location worked out from your IP address. Google Analytics does not store the IP address itself.

We also send it a short list of actions so we can tell whether the site is working: opening the donation panel, starting a card donation, following a PayPal or Venmo link, a completed donation and its amount, clicking a link to our Discord, starting or completing a sign-in and which provider you used, running one of the tools, and copying a share link or image. None of these actions carries your name, email address, account identifier, Sleeper username, or league; they name only which part of the site you were on. Donation amounts are sent without anything that says who gave them. Payment session identifiers, sign-in codes, Sleeper usernames typed into a search and league names passed in a link are stripped out of page addresses before Google Analytics records them.

Google Analytics keeps the visit-level and event-level detail for 14 months; after that only aggregate totals remain. We have Google signals turned off, so it is not combined with anything Google knows about you from a signed-in Google account, and it is not linked to advertising. You can stop Google Analytics from collecting anything about you on this site, and every other site, with Google's opt-out browser add-on (opens in a new tab), or by blocking or clearing its cookies. The site works the same either way.

Discord polls

If you vote on one of our polls in Discord, we record your Discord user identifier against that poll so that one person is counted once. We do not publish who voted, and we do not link Discord poll votes to your FF Beacon account.

2. Why we collect it, and our legal basis

  • To authenticate you and keep you signed in. Basis: performance of a contract with you.
  • To save the preferences that personalize the product. Basis: performance of a contract.
  • To power features that need league data (League Pulse, Power Pulse, the power-rankings table, the trade analyzer, Manager Pulse, the transaction feed). Basis: performance of a contract.
  • To pass a donation you choose to make to the payment processor that handles it. Basis: your consent, given by choosing to donate. A donation is a gift rather than a purchase, so there is no contract here to perform.
  • To prevent abuse, rate-limit expensive endpoints, and keep the service available. Basis: our legitimate interest in a service that stays up.
  • To understand which pages and tools are used, where visitors come from, and whether sign-ins and donations complete, in aggregate. Basis: our legitimate interest in improving the product. We do not show a cookie consent banner; you can block Google Analytics at any time with the opt-out described in the Analytics block in section 1.
  • To send email digests, if and only if you explicitly opted in. Basis: your consent, which you can withdraw at any time.
  • To show advertising that keeps the site free. Basis: our legitimate interest in paying for the service without a paywall, and, where local law requires it for personalized ads, your consent, which you can withdraw through the opt-out links in the Advertising block above.

3. Who we share it with

We do not sell, rent, or trade your personal information. The list below is every third party involved in running the product, and they are not all the same kind of party. Some process data on our instructions. Some are independent of us and decide for themselves what they do with what you give them. Some receive nothing about you at all. Each entry says which:

  • Supabase, managed PostgreSQL, authentication, and file storage. Processes on our instructions. Stores your account, preferences, posted content, and synced league data.
  • Vercel, hosting and edge network, including the request logs described above and a page speed measurement that sets no cookie.
  • Google Analytics, the cookie-based analytics described above. Processes on our instructions under Google's data processing terms, and receives the page views and actions listed in the Analytics block in section 1.
  • Stripe, card and digital wallet payments for donations. Stripe acts as an independent controller of the payment data you give it directly, not on our instructions, and uses it for payment processing and fraud prevention under its own policy.
  • PayPal and Venmo, only if you choose one of those donation buttons. You leave our site to complete the payment on theirs, and they receive whatever their own flow collects.
  • Resend, transactional and digest email delivery, including donation receipts. Processes on our instructions, and receives the recipient address and the message.
  • Google and Discord, only when you choose to sign in with one of them. They receive the fact that you authenticated against the FF Beacon app; we receive the profile fields listed above. Discord additionally receives poll interactions you make in our server.
  • Google AdSense, which serves the ads. Google acts as an independent controller of what its advertising cookies collect, under its own policy, and the Advertising block in section 1 says how to opt out of personalized ads. We receive aggregate reporting from it (how many ads were shown and clicked), never a list of who saw them.
  • Anthropic, whose language models help draft parts of the Beacon Brief and some analytical commentary from public NFL news and our own data. No personal information about you is sent to it.
  • Sleeper, KeepTradeCut, FantasyCalc, DynastyProcess, odds providers, and GIPHY. We read from their public interfaces from our own servers. We do not send them anything about you, your browser does not contact them directly for this content, and they do not know who is browsing our site.

We may disclose information if compelled by lawful process, or where necessary to protect the rights, property, or safety of FF Beacon, our users, or the public. If the Service is ever transferred to a new owner, account data may transfer with it, and we will say so on this page before it takes effect.

4. Where your data is processed

FF Beacon is operated from the United States and our providers process data in the United States and, for edge delivery, in other regions. If you are in the European Economic Area, the United Kingdom, or Switzerland, this means your information is transferred outside your home country. Our providers rely on the European Commission's Standard Contractual Clauses or an equivalent transfer mechanism for those transfers.

5. Google API Services User Data Policy

FF Beacon's use and transfer of information received from Google APIs to any other app will adhere to the Google API Services User Data Policy (opens in a new tab), including the Limited Use requirements. We use the data we receive solely to authenticate you and to populate your profile (name, email, avatar). We do not transfer this data to third parties for any purpose other than the providers named above, do not use it for advertising, do not use it to train machine learning models, and do not allow humans to read it unless we have your explicit consent or it is necessary for security or to comply with applicable law.

6. How long we keep it

  • Account and preference data: while your account is active, and deleted when you ask us to delete the account.
  • Public Signal profile content: until you delete it or the account, allowing for backup copies to age out.
  • Synced public Sleeper league data: while the league remains in use, or until you request removal of the leagues you brought in.
  • Donation records: kept indefinitely as a financial record, but they identify nobody. A row holds an amount, Stripe's identifiers, and whether we managed to email a receipt. It contains no name, no email address, and no payment details.
  • The payment itself, including your name, email address, and billing details, lives with the payment processor for as long as its own legal obligations require. We can neither delete nor amend that copy on your behalf; to have it removed you would need to ask the processor directly.
  • Rate-limit hashes: short-lived, and expire with their window.
  • Advertising cookies: set and expired by Google under its own policy. We hold none of them, and clearing your browser's cookies removes them.
  • Google Analytics: visit-level and event-level detail for 14 months, aggregate totals after that. Its cookies in your browser expire two years after your last visit unless you clear them.
  • Hosting request logs: retained by our hosting provider on a rolling short-term basis, typically 30 days.

7. Your rights and choices

Whoever and wherever you are, you can:

  • View and change your preferences (format, source, Sleeper username, theme, email opt-in) from your dashboard.
  • Disconnect Sleeper sync by clearing your Sleeper username.
  • Delete your Signal profile and anything posted to it.
  • Unsubscribe from the email digest using the link in any message it sends.
  • Request a copy of the personal data we hold about you, ask us to correct it, or ask us to delete your account, by emailing michael@ffbeacon.com. We will respond within 30 days and will not charge you or treat you differently for asking.
  • Revoke OAuth access to FF Beacon from your Google account settings or your Discord authorized-apps page at any time.

If you are in the EEA, the UK, or Switzerland, you also have the rights to object to processing based on legitimate interests, to restrict processing, to data portability, to withdraw consent at any time without affecting prior processing, and to complain to your local supervisory authority.

If you are in California, you have the rights to know, delete, and correct, and the right to opt out of sale or sharing. We do not sell personal information and have not done so in the preceding twelve months. Personalized advertising served by Google may count as "sharing" as the CCPA defines it, and the opt-out for it is the one in the Advertising block in section 1, because Google is the party holding the data. We do not knowingly sell or share the personal information of anyone under 16. We do not yet act on the Global Privacy Control browser signal automatically; use the opt-out links above, and this page will say so when that changes.

8. Security

We protect data with HTTPS in transit, encryption at rest via Supabase, row-level security so an account can only read and write its own records, server-side authorization checks on the endpoints that change data, hashed identifiers in the abuse-prevention ledger, and rate limits on public and admin endpoints. Card data never reaches our servers at all.

No system is perfectly secure. Use a strong, unique passphrase on whichever provider you sign in with, and turn on its two-factor authentication. If we become aware of a breach affecting your personal data, we will notify you and any required regulator without undue delay. If you think you have found a vulnerability, email michael@ffbeacon.com rather than posting it publicly.

9. Children

FF Beacon is not directed to children under 13 and we do not knowingly collect personal information from them. If you are a parent or guardian and believe a child has given us personal data, email michael@ffbeacon.com and we will delete it.

10. 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. Material changes will be highlighted on the homepage or through an in-app notice before they take effect.

11. Contact

Questions, requests, or complaints go to michael@ffbeacon.com. You can also reach us through the contact form on the About page. The data controller is Michael Walsh, operating FF Beacon in the United States.