LLMSRank — Privacy Policy
LLMSRank collects the following categories of data: contact, identifiers, usage, content. Perfect Ship LLC uses this data only to operate the app.
LLMSRank keeps real records in a hosted Postgres database, not only in your browser. This page lists them table by table, because a summary would hide the parts that matter. It is a commercial product about a commercial asset — your website — and the data is correspondingly real.
You can run a scan without an account, and the free scan is the front door. Even then a row is written: the domain you typed, the time you asked, the progress of the job, and the result. Free scans are also rate limited, and the rate limiter stores your IP address as the key of a counter row (the bucket is literally the text "scan:" followed by your IP) together with a count and the end of the counting window. That row exists so that five free scans a day is five, and it is the one place an anonymous visitor's IP address is written down.
Signing in stores an email address. Authentication is Auth.js (NextAuth) against the same database, and its tables hold: your email address, an optional name, an optional profile image URL, the time your email was verified, a generated user ID, and — for sign-in links sent to your inbox — a row keyed by that same email address ("identifier") with a one-time token and its expiry. If a social sign-in provider is ever enabled, that table also holds the provider's name, the account ID it gives us, and its access, refresh and ID tokens. Sessions are stored server-side as a session token, your user ID, and an expiry. To be exact about where the product currently stands: the sign-in provider list is empty in the deployed code, so there is no working sign-in today and no account has been created — the schema and the adapter are in place and this is what they will hold the moment it is switched on.
Billing is Stripe, and your Stripe customer identifier is stored on your account row, alongside a generated account ID, the user ID of the owner, your plan name, and when the account was created. Card numbers, expiry dates and security codes are not in the database — there is no card, payment-method or card-fingerprint column anywhere in the schema, and the payment flow is Stripe Checkout and Stripe's own customer portal, so card details are entered on Stripe's pages and held by Stripe. What we hold is the customer identifier Stripe gives us, which lets us ask Stripe about your subscription. Stripe's own handling of your payment details is governed by Stripe's policies, not ours.
Your websites and their content are the subject matter of the product, so they are stored. For each site you add we hold the domain, an industry tag, and whether that tag was guessed by the classifier or corrected by you. For each scan we hold the domain, the times, the outcome, the rubric version, the numeric score, the letter grade, a list of alarms, and a full scorecard document that quotes evidence out of your own files. We also store snapshot records of the files we fetched from your public URLs — llms.txt, robots.txt, llms-full.txt and AGENTS.md — with the URL, HTTP status, content type, byte count, a SHA-256 hash, whether the fetch was truncated, and a storage key pointing at the gzipped bytes of the file itself in object storage. Every version of an llms.txt the product generates for you, or that you edit by hand, is likewise stored as a hash plus a storage key for its bytes, with its source (generated, your edit, or a drift proposal), whether it was verified live, and when it was deployed. The scan pipeline archives those fetched files permanently into a research corpus keyed by your domain. Only publicly reachable URLs are fetched; the crawler identifies itself and honours robots.txt.
The monitoring side, when it is running, stores the search queries attached to your site (their text, whether you or a playbook or Search Console supplied them, and whether they are active), the competitor domains you list, alerts raised against your site, and observation rows recording whether an AI engine cited you for a query — the engine name, when it was sampled, which sample it was, whether you were cited, the URLs it cited, your position, and a storage key for the cached raw response. The engine adapters that would write those rows are deliberately unimplemented in the deployed code, so no such rows exist yet.
Nothing about you or your site is sent to a third-party AI provider by the scanner. The scan fetches four public files from your own domain and scores them with a local, zero-dependency rubric engine; there is no model API call anywhere in the scan path, and the citation-monitoring code that would query AI engines is not implemented. There is one honest caveat, and it is about our research rather than your account: the studio's own offline research tool can send files out of the archived corpus to Anthropic's API to grade the quality of link descriptions, and files fetched from scanned domains are archived into that corpus. Those are files you publish openly on the web for AI agents to read, they contain no account data, and the tool is run by hand and never as part of a scan — but it is a real path by which the contents of a public file of yours could reach an outside model, and it would be dishonest to leave it out.
Perfect Ship LLC does not sell this data, does not use it for advertising, and runs no analytics, telemetry, crash reporting or third-party tracking in the app. The data is used to run the scan, to show you your report, to bill you, and to improve the scoring rubric.
To delete your account, email support@theperfectship.com from the address on the account, or use the account deletion page linked from this app's support page. Deleting the account removes the user record, the sessions, the billing account row and its Stripe customer identifier, your sites, and everything hanging off them — scans, llms.txt versions, queries, citation observations, competitor domains and alerts, all of which are keyed to a site and go when it goes. Two things do not go automatically, and you should know it: snapshot records and their archived file bytes are keyed by domain rather than by account, and scan rows for a domain can exist from before anyone signed up (that is how the free scan works), so ask us in the same email if you want the archived copies of your public files purged as well and we will remove them. Stripe keeps its own record of your payments for as long as its own obligations require.
LLMSRank supports user accounts. You may request deletion of your account and its associated data at any time — see the account deletion page linked from this app's support page.
Questions about privacy: support@theperfectship.com.