Privacy Policy
Last updated: September 29, 2026
Rivul AI holds unpublished research. This page names every company that touches it, states plainly whether it trains anybody's model, and describes what account deletion actually removes rather than what would be reassuring to claim.
Who this policy is from
Rivul AI is a research writing platform. For the purposes of the UK and EU General Data Protection Regulation, Rivul AI is the controller of the personal data described below, and the companies named further down are its processors.
Questions about privacy, and every request to see, correct, export or delete your data, go through the contact form at rivul.ai/contact. Choose the topic Privacy or data request.
What we collect
Your account. You sign in with Google. We store the email address and name Google returns, and the Google account identifier that links your sign-in to this account. We do not keep the access, refresh or ID tokens Google issues at sign-in, we do not store your Google profile picture, and there is no password.
We also store a flag recording whether the address has been verified, and a counter that invalidates old sign-in sessions when you sign out.
Your work. The documents you write, stored as editor content; the paper brief that steers autocomplete; your references and their bibliographic fields; your saved searches and paper alerts; and your reading annotations, meaning the passage you highlighted and any note you attached to it.
Research agents. The agents you create (name, goal, instructions, sources and output settings) and each agent run: your question, the report, the sources it cited or read, the steps it took (tool names, short search terms and result counts, never library text), and the token counts your AI provider reported. You can delete an agent or a run at any time, and both are deleted with your account.
Your library. The PDFs you upload or fetch, kept as files; the text extracted from each of them, including text recovered by optical character recognition when a scan has no text layer; a content hash used to spot a duplicate upload; and the metadata that travels with a paper, such as title, authors, year, DOI, abstract and citation count.
Searching your library is a keyword and full-text match over that extracted text inside our own database. So that Ask Rivul can answer across your papers, Rivul AI also splits each paper's extracted text into passages and converts each passage into a list of numbers (a vector) with an open-source model, BAAI's bge-small-en-v1.5, running on Rivul AI's own server at Hetzner in Germany. When you ask Ask Rivul about your library, your question is converted the same way on the same server to find the matching passages. No AI provider or language model is involved in this step and nothing is sent to an AI company for it. The passages and their vectors are stored with your account in our database and are deleted when you delete the paper or your account. The answer itself is written by the AI provider you connected, using your own key, from the passages that best match your question. Adding a PDF sends no text to any AI provider.
Your AI connection. AI features work only after you connect your own API key for one AI provider, Google Gemini, OpenAI, Anthropic, xAI, Mistral or Meta, in Settings → AI provider. We store the provider you chose, the model name, and the key. The key is encrypted with AES-256-GCM, bound to your account, used only for your own requests, never shown back to your browser and never written to our logs, and it is deleted when you remove the connection or delete your account. Only one key is stored at a time: saving a key for another provider replaces the previous key and deletes it.
Usage. Counts of AI requests and autocomplete suggestions per day, and the token counts your AI provider reports for each call. We keep these so you can see your own usage and so we can detect and stop abuse. Your provider bills you directly for those calls; Rivul AI pays for no model calls.
App activity. Rivul AI records when you use the app (last seen and active minutes per day) to understand usage, kept with your account and deleted with it. It is included in your account export.
Activity log. Rivul AI keeps a log of the actions you take in the app, such as creating a paper, uploading a PDF, running a search or using an AI feature, with their times but never their content, for 180 days; it is included in your export and deleted with your account.
Account activity. A security log of events such as sign-in success and failure, AI key connection and removal, rate-limit exhaustion, document and library deletion, account export, and account deletion. Each row holds the event name, a small amount of metadata, and a timestamp.
For sign-in events that metadata includes the email address the attempt was made with. The log has a column for an IP address and nothing in the codebase writes to it, so in practice it is always empty.
Technical data. Our server logs record a request identifier, the route class with identifiers stripped out, the HTTP method and status, and how long the request took. Where the middleware redirects a request or refuses it for exceeding a rate limit, the log line for that decision also records the client IP address.
IP addresses are additionally used as short-lived rate-limiting counter keys, so that one visitor cannot exhaust the service for everyone.
Contact-form messages. When you use the contact form we store the topic you chose, your message, the reply email if you gave one, your account identifier if you were signed in, your browser's user-agent string shortened to 256 characters, and a keyed one-way hash of your network address used to spot repeated abuse. The raw IP address is not stored with the message. Nothing is emailed; messages are read in our admin view.
We do not ask for, and do not want, special-category data as defined by GDPR Article 9. Please do not put patient records, identifiable human-subject data or similar material into a Rivul AI document or library unless you are authorised to process it and satisfied that this policy is adequate for it.
Where your data lives
The database is PostgreSQL hosted by Supabase, which runs it on Amazon Web Services. It holds your account record, documents, references, library catalogue and extracted PDF text, annotations, usage counters, the activity log, contact-form messages, your encrypted AI key if you connected one, and the passages of your extracted text with their vectors, used by Ask Rivul.
The PDF files themselves are in a private Google Cloud Storage bucket, one object per file, under a path derived from your account identifier. The bucket is not public and there is no unauthenticated route to an object in it.
When your browser uploads a large PDF it does so directly to Google Cloud Storage using a signed URL that Rivul AI mints for that one object and that expires after fifteen minutes; this exists because the hosting platform caps request bodies at about four and a half megabytes.
The application itself runs on Vercel.
If data residency governs whether you may use Rivul AI for a particular project, ask through the contact form at rivul.ai/contact before you upload anything.
Every company that receives your data
This list is meant to be complete. If you find something that reaches a company not named here, that is a bug in this page and we want to hear about it.
The AI provider you connect, whichever of Google Gemini, OpenAI, Anthropic, xAI, Mistral or Meta you chose, receives the text needed to answer an AI request you make: the passage you selected, the surrounding draft, any library excerpts or sources used to ground the answer, and your question. Our server sends it using your own API key. Each of these providers receives the text of AI requests only when you have connected it; the others receive nothing. Nothing goes to any AI provider until you connect one and request an AI feature, and nothing is sent when you add a PDF. With Meta, Rivul AI uses only Meta's standard models, never its contributor models, whose data Meta uses to improve its products.
A research agent run sends your question, the agent's goal and instructions, and the search results and library excerpts the agent selects to that AI provider. When an agent uses the web, the search runs through your AI provider's own web search, and that search receives only your question and the titles of published papers from the Rivul Index, never your library text.
Google Cloud Storage, separately, holds your PDF files.
Supabase hosts the database described above and therefore stores everything in it.
Hetzner Online, in Germany, rents Rivul AI the server that runs the Rivul Index, Rivul AI's PDF reader and its passage embedder. The Index receives the text of paper searches. When a PDF you add has no text layer (a scan), Rivul AI sends that file to the PDF reader over an encrypted connection to recover its text; the file is read in memory, is not stored or logged there, and only the recovered text comes back to your library. When you add, fetch or re-extract a PDF, its extracted text is sent in passages to the embedder, and when you ask Ask Rivul about your library, your question is; both travel over an encrypted connection, are read in memory by the open-source model, are not stored or logged there, and only the vectors come back.
The same server in Germany runs Rivul AI's speech service. Audio and video you send to Transcribe, including recordings, are held in Google Cloud Storage only until the speech service has read them, then deleted; the audio is processed in memory, is not stored or logged there, and the transcript is kept in memory only until your browser collects it. Text you play with the Rivul voice in Listen is turned into speech there the same way and is not stored or logged; your browser keeps the resulting audio in its own cache so the same text is not sent twice. The browser voice in Listen runs on your device and sends nothing. Transcribe and Listen never send audio or text to an AI company.
Vercel hosts and serves the application, processes every request, and captures our server logs. Vercel Web Analytics and Vercel Speed Insights receive the anonymous page-level measurements described under analytics below.
Resend sends our transactional email, which means it receives your email address and the contents of the message: account welcome and service notices about your account. Nothing marketing is sent through it.
Upstash, when configured, provides the Redis cache that holds scholarly metadata and search results for up to twenty-four hours, together with the rate-limiting counters and the short-lived traffic counters and daily visitor codes described under analytics below. Your search text can therefore sit in that cache for the life of the entry. When Upstash is not configured, the same cache is held in the application's own memory and disappears with the process.
An error-monitoring service receives crash reports when one is configured, using an endpoint compatible with Sentry, which the operator may also point at a self-hosted instance so that nothing leaves. See the error monitoring section for exactly what is in a report.
The scholarly databases named in the research databases section receive lookup queries and identifiers.
Google, if you use Google Drive or Google Docs from Rivul AI, handles those requests directly from your browser, as described in the next section.
Google Drive and Google Docs
Connecting Google Drive is optional and happens only when you choose Connect on the Connectors page, Add from Google Drive in your library, Import Google Doc when creating a paper, or Save to Google Docs when exporting a paper. Signing in with Google does not grant it.
Rivul AI asks Google for one permission, the drive.file scope. It covers only the files you pick in Google's own file picker and the documents Rivul AI creates for you. Rivul AI cannot see, list or change anything else in your Google Drive.
Google gives your browser a short-lived access token for that permission. The token stays in the memory of that browser tab. Rivul AI's servers never receive or store a Google Drive access token. So that the Connectors page can show Google Drive as connected after a reload, your browser keeps a small note in its own storage that you connected; the note holds no token and never leaves your browser. Your browser downloads the file you picked and sends it to Rivul AI through the same upload or import used for a file on your computer, so the same storage and size limits apply: a PDF joins your library, and an imported Google Doc becomes a new paper. Save to Google Docs sends the Word export of your paper from your browser straight to your Google Drive.
Rivul AI's use and transfer of information received from Google APIs adheres to the Google API Services User Data Policy (developers.google.com/terms/api-services-user-data-policy), including the Limited Use requirements. That data is used only to provide these features. It is not sold, not used for advertising, and not used to train any AI model.
To disconnect, choose Disconnect on the Connectors page, which clears that note and revokes the current token with Google, or remove Rivul AI from the third-party connections in your Google Account at any time. Files already added to Rivul AI stay until you delete them, and documents saved to your Google Drive stay there.
Whether your work trains an AI model
Rivul AI does not train any model on your drafts, your library or your prompts. There is no training pipeline in the product and no dataset assembled from user content. We do not sell your content, and we do not share it with anyone for their own purposes.
The question that matters more is what the AI provider does, because that is where your text actually goes. Rivul AI holds no AI model key of its own. The provider is the one you chose when you connected your key, and the request runs under your account with that provider.
That provider's own API terms and data-use policy govern how it processes, retains or trains on what it receives. Rivul AI does not control those choices and cannot change them for you. Providers differ, and some treat paid and unpaid API use differently, so read your provider's API terms before you send it work where the difference is material.
Adding a PDF to your library sends nothing to any AI provider. Text leaves Rivul AI for an AI provider only when you request an AI feature, and only to the provider you connected.
Why we process your data, and our legal basis
Under GDPR Article 6, our bases are as follows, and the intended reading is that almost everything here is contract rather than consent, because almost everything here is the product working.
Performance of a contract, Article 6(1)(b). Storing and serving your documents, references, library and annotations. When you request an AI feature, sending the text it needs to the AI provider you chose, using your own API key. Fetching citation metadata. Authenticating you and keeping your session alive.
Legitimate interests, Article 6(1)(f). Enforcing short-window rate limits and storage limits, without which one account can exhaust a shared resource. Rate limiting, and keeping the security activity log, both of which protect every account including yours. Storing and reading the contact-form messages you choose to send.
Aggregate analytics and error monitoring, in the minimised forms described below, help know whether the service works. Caching scholarly metadata avoids hammering public research infrastructure. Our interest in each case is running a service that stays up and is not abused, and the processing is scoped to that.
Legal obligation, Article 6(1)(c). Responding to copyright takedown notices as described on the copyright page.
Consent, Article 6(1)(a). Only where you connect an optional integration, which today means Zotero and Google Drive. Nothing is sent to either unless you use it, and disconnecting it stops that.
We do not use your data for automated decision-making that has a legal or similarly significant effect on you, and we do not profile you for advertising. There is no advertising in Rivul AI.
What we send to research databases
Citations in Rivul AI come from publisher metadata rather than from a language model, which means the product asks public scholarly APIs a great many questions. What travels to them is identifiers and search terms. Your draft does not.
Crossref receives DOIs and title or author search strings. DataCite receives DOIs. OpenAlex receives your literature search queries. Semantic Scholar receives search queries and paper identifiers, including when you ask for papers similar to one you hold.
arXiv receives search queries and arXiv identifiers, and serves PDFs you choose to fetch. Unpaywall receives a DOI when the product looks for a legally free copy of a paywalled paper, together with a contact address that is Rivul AI's own, never yours. Resolving a DOI goes through doi.org.
Two of these deserve more than a line. First, some of these lookups happen in your own browser rather than on our server, which is the case for the citation popover and parts of the paper search. When that happens the request comes from your device, so the database sees your IP address and your browser's own headers directly, and Rivul AI is not in the middle of it.
Second, a scheduled job runs once a day and checks every DOI in every library against retraction registers, currently the Retraction Watch dataset and Crossref. That job therefore sends the DOIs of papers in your library, and nothing else about you, to those sources. It is how a paper in your library gets flagged as retracted before you cite it.
Community skills work the same way. When you search for a community skill, Rivul AI's server sends your search words to skills.sh. When you preview or add one, it fetches that skill's SKILL.md and licence from GitHub, which receives the repository and skill path. Nothing from your library, drafts, or account is sent to either.
Where a database asks integrations to identify themselves, Rivul AI sends a contact email address belonging to Rivul AI, so that these services can reach the operator rather than throttle everyone. No user's address is ever used for that.
Error monitoring
When a crash reporter is configured, a report contains the error message, the error type, a stack trace, which boundary caught it, the request identifier, the route class, and your opaque account identifier. Message fields are cut to five hundred characters and stack traces to two thousand.
The design point is that the report is built from a fixed allowlist of fields rather than by excluding known-bad ones, so a field nobody thought about is dropped rather than transmitted.
Nested objects and arrays are discarded outright, because that is the shape in which a request body or a document would arrive. Text is scrubbed for anything resembling a connection string, a bearer token, a key or an email address before it leaves.
Your email address is never attached, and your IP address is never attached, because reports are sent from our server rather than from your browser.
A client-side crash beacons the same shape from your browser: the message, the error name, the stack, the boundary, the path you were on, your browser family (Chrome, Safari, Firefox, Edge or other, not the full user-agent string), and whether a page translator or a writing extension had changed the page. Not the page's contents, not what you had typed, not a token.
How long we keep things
Your account, documents, library, annotations and references are kept for as long as your account exists. There is no automatic expiry on your work and we do not delete an inactive account without telling you.
The security activity log is purged automatically after ninety days by a daily scheduled job.
Contact-form messages have no automatic expiry. They are kept while they are needed to handle what you wrote, a message sent while signed in is deleted with your account, and you can ask through the form for a message to be deleted.
Cached scholarly metadata and search results expire on their own, within twenty-four hours. Rate-limiting counters expire within minutes.
Server logs are held by Vercel for the period its platform provides, which is short and is a property of the hosting service rather than something Rivul AI configures. Previous versions of this page claimed a ninety-day retention for server logs; that figure belonged to the activity log above and was wrong here, and stating it correctly is more useful to you than restating it.
Database backups may hold a copy of deleted content until the backup itself ages out. The storage bucket may be configured with object versioning, in which case a deleted file remains recoverable for a bounded window before it is expired. Deletion from the live systems is immediate; deletion from backups follows the backup cycle.
Deleting your account, and exactly what that removes
You can delete your account yourself, from settings, without asking anyone. It asks for a recent Google sign-in and for you to type your account email address. There is no waiting period and no retention offer.
What it removes. Every PDF file in your library, deleted from cloud storage twice over: once for each file the database knows about, and then again as a sweep of the whole storage folder belonging to your account, so that a file no database row points at is caught rather than left behind.
Then, in a single database transaction, the passages and vectors computed from your library for Ask Rivul, and the account row itself, which cascades to your encrypted AI key, your workspaces, every document and its references, your entire library catalogue and extracted text, your annotations, usage counters, saved searches, paper alerts, contact-form messages sent while signed in, pending email tokens, connected sign-in providers, and sessions.
Because it is one transaction, either all of it happens or none of it does; a failure leaves an account you can delete again rather than orphaned text with no owner.
If the storage sweep cannot confirm that every file is gone, that is recorded and raised as an error rather than reported to you as success, and the response tells you the sweep was incomplete. An erasure that quietly half-worked is the failure mode this is built to avoid, because nothing in the product would otherwise ever show it.
What it does not remove, stated because a policy that only lists the reassuring half is not worth reading. Rows in the security activity log survive, with the link to your account severed so that they no longer identify you, until the ninety-day purge reaches them.
One of those rows is the record of the deletion itself, holding the row counts removed, because proof that an erasure happened has to outlive the thing it is proof of.
Cached search results survive until their own expiry, within twenty-four hours. Copies inside database backups survive until the backup ages out. Any error reports already sent to the monitoring service are governed by that service's retention rather than ours.
Export your work before you delete it, because deletion is not reversible. The export is described next.
Your rights, and how to use them
If you are in the UK, the European Economic Area or a jurisdiction with comparable law, you have the right to know what we hold, to get a copy, to correct it, to have it erased, to receive it in a portable form, to restrict or object to certain processing, and to withdraw a consent you gave.
We extend the same handling to everyone, wherever they are, because operating two standards would mean building the worse one.
Three of these you can exercise yourself, right now, without contacting us, which we consider the point.
Access and portability: settings has an export that produces a single ZIP containing your account record, one file per paper as both structured data and Markdown, the text extracted from each library PDF, your annotations, saved searches, alerts, usage totals and recent account activity. It also contains a plain-English note explaining what is in it and what is not, including anything the size limit forced it to leave out.
The original PDF files are not included, since they are the publishers' files and you already hold your own copies; the archive lists every one of them with its filename, content hash, DOI and source URL, so it is a complete catalogue. Sign-in tokens, your AI key and connected-account credentials are excluded on purpose, because exporting credentials is a security hole rather than a portability feature.
Erasure: the account deletion described above. Correction: your name and email come from your Google sign-in, so ask through the contact form at rivul.ai/contact if either needs correcting here, and every document and library item can be edited or deleted individually.
For anything else, including restriction, objection, or a question about a specific piece of processing, use the contact form at rivul.ai/contact. Requests under data protection law are handled within the period that law sets. We do not charge for a request and we do not require a particular form of words.
If you think we have got it wrong, you can complain to your national data protection authority. In the EU that is the authority for the country you live in; in the UK it is the Information Commissioner's Office. We would rather you told us first, but that is your right and not conditional on doing so.
International transfers
Rivul AI's providers are United States companies, and processing your data will involve transferring it to, or making it accessible from, the United States, whichever region your data is stored in.
The AI provider you connect is your choice, and it may process your requests in other countries. That processing is governed by your own agreement with the provider.
For transfers out of the UK or the European Economic Area, the mechanism relied on is the European Commission's Standard Contractual Clauses together with the UK International Data Transfer Addendum, as incorporated into each provider's data processing terms. Google, Vercel, Supabase, Resend and Upstash each publish a data processing agreement containing them.
Children
Rivul AI is built for academic researchers and is not directed at children. You must be at least sixteen years old to hold an account, or older where your country sets a higher age for consenting to online services on your own behalf. We do not knowingly collect personal data from a child. If you believe a child has created an account, report it through the contact form at rivul.ai/contact and it will be deleted.
Security
What is actually true, rather than the usual list of adjectives. All traffic is served over HTTPS. Sign-in is through Google, so Rivul AI holds no password. Your AI key is encrypted with AES-256-GCM before it is stored.
The PDF bucket is private, and a browser reaches an object in it only through a short-lived signed URL scoped to that single object.
Data at rest is encrypted by the storage providers, which is to say by Supabase and Google Cloud Storage as part of their platforms, rather than by an additional layer Rivul AI applies on top.
Rivul AI has not completed a SOC 2 audit or an independent penetration test. No system is perfectly secure. You are responsible for keeping your own credentials confidential, and securing the Google account you sign in with, for example with two-step verification, is the single most effective thing you can do.
If there is a data breach
If a breach occurs that is likely to result in a risk to your rights and freedoms, we will notify the relevant supervisory authority within seventy-two hours of becoming aware of it, as GDPR Article 33 requires, and we will notify you directly, by email to the address on your account, without undue delay where Article 34 requires it or where we judge that you would want to know.
A notification will say what happened, what data was involved, what we have done about it, and what we suggest you do. It will not wait until the investigation is complete, because a late complete answer is worse than a prompt partial one.
Changes and contact
When this policy changes we will post the new version here with a new last-updated date at the top. If a change materially reduces your protections or widens what we do with your content, we will email account holders before it takes effect rather than relying on you to notice.
Contact for anything on this page, including every request under the rights section: the contact form at rivul.ai/contact. There is no email address for these requests.