Legal
Privacy
BugTape captures bug reports with browser context. Hosted leftover screenshot and audio fields are accepted and then dropped. This page explains, at a high level, what may be collected and how teams can keep that capture narrow and controlled.
What BugTape is for
BugTape helps teams capture bug reports with browser context such as session events, console output, network failures, and user-supplied notes. Leftover screenshot and audio fields on ingest are not stored on the hosted instance. This page explains the data we process, how long we keep it, and how you can exercise your rights under GDPR, ePrivacy, and comparable regimes.
Transmit model (what leaves the browser)
The BugTape SDK runs in a customer's own web app and keeps a rolling buffer of browser activity in memory until the user submits a bug or automatic reporting fires. Until then, that buffer stays on the device. On submit or auto-report, scrubbed events — including DOM snapshots when recording is enabled — are transmitted to and stored on BugTape servers (Fly.io + Neon) for the plan's event-retention window.
Form and editable inputs are masked by default. Mark private regions with data-bugtape-ignore or the bugtape-ignore class. Visible page text and tables are still captured unless you block those nodes. With privacy: 'strict', every character of page text in the replay becomes a solid block in the browser before it is sent (so “Anna Smith” is recorded as “▇▇▇▇ ▇▇▇▇▇”), text in attributes such as titles and labels is masked, URLs lose their query strings, and request bodies are never kept. Error messages, stack traces and console messages are still sent after the PII scrub. With disableDomRecording: true no page replay is recorded at all. Do not read this page as “raw data never leaves” or “without transmitting raw data.” Agents and integrators should treat client-name / revenue / margin grids as sensitive until scrub and blocklists are proven. Machine summary: /llms.txt.
Before you paste a capture key into an app with client or revenue grids: complete the privacy proof checklist and run the privacy fixture (pass = blocked FORBIDDEN_* strings absent from replay). Prefer server-only ingest for client-data surfaces.
What data we collect
- Session events: DOM mutations, user interactions (clicks, inputs, navigation), console output, and network request metadata (URL, method, status, timing) — buffered locally, then stored on BugTape after submit/auto-report when capture is enabled.
- Bug reports: the rolling buffer at the moment of capture, a user-supplied title/description, leftover screenshot/audio fields (accepted then dropped — not stored), the reporter's email if provided, and environment (browser, OS, viewport, page URL).
- Derived artifacts: an AI-generated title, severity estimate, reproduction steps, and suggested fix based on the captured events.
- Account and team info: email, name, organization, roles, team memberships, API keys, notification preferences, and integration configs.
- Telemetry: request IDs and timing for our own reliability. We do not use third-party analytics or advertising pixels; our own website counters are described next.
- Website analytics (bugtape.ai only): we run two visit counters ourselves, on our own domains (bugtape.ai and pulse.bugtape.ai). No outside analytics company receives this data, and neither counter sets a cookie or stores your IP address. Page counter: for each page view it records the page, the referring site, any campaign tags in the link, screen size class, browser family, time zone and language, which buttons you press, how far you scroll, and page-speed timings. If you then sign up, the source of that first visit (referring site, campaign tags and first page) is stored with your account until you delete the account. Search and AI crawlers are counted by name. Page-view records are kept for 400 days. Visit counter (jv-pulse): for each page view it records the page, the referring site, campaign tags, which ad click ID was in the link (for example gclid or fbclid; that an ID was there, not the ID itself), a screen-width band, device, browser and operating system family, your country (worked out by Cloudflare from your connection), how long the page was visible and in active use, how far you scroll, page-speed timings, and for each click the element’s CSS selector, where inside the element and how far down the page you clicked, and whether it looked like a repeated (“rage”) or dead click. It never records the text you see or type. If you create an account, we send the visit counter one anonymous “signup” count, linked only to that random visit id; it holds no email, name or account id. To count unique visitors per day, your IP address and browser user-agent are combined with a random key that is replaced every day and hashed; the IP itself is not stored, and the key is deleted, so the hash cannot be linked to another day. Raw page and click events are deleted after 35 days; visit summaries (the hashed daily key, country, device, campaign tags, pages, time and scroll) are deleted after 400 days. Aggregate daily totals and click and scroll heatmap counts, which hold no visitor key or visit id, may be kept longer. Do Not Track, Global Privacy Control and automated browsers turn the visit counter off. Turn both counters off for your browser on bugtape.ai with bugtape.ai/?bt_ignore=1; the sign-up page still notes the site that linked to it.
What data we do not collect
- We do not record screen content outside the customer's web app.
- We do not capture keystrokes in password fields or elements marked as sensitive by the customer's SDK configuration.
- We do not sell, rent, or share customer data with advertisers.
- Hosted leftover screenshot and audio blobs are not retained after ingest (accepted, then dropped).
Retention
- In-flight events: Session events live only in the user's browser memory (the rolling buffer) and are discarded when the tab closes, unless a bug is submitted.
- Server-stored reports: Replay and timeline events are purged after the plan's event-retention window: 7 days on Free and 30 days on Pro. Issue metadata remains until the issue, project, or account is deleted. Other plans follow their listed event-retention window.
- Account data: We keep user, org, and team data until the account is deleted. Closed accounts are removed on request (see "Your rights" below) and otherwise after 12 months of inactivity.
- Logs: Request traces and error logs are kept for up to 90 days for security and reliability.
Your rights
You can exercise GDPR/ePrivacy rights directly through the BugTape API or by emailing hi@bugtape.ai.
- Access / export:
POST /v1/auth/data-export(authenticated) returns a JSON blob of every record tied to your account — user row, org memberships, projects, bug reports you filed, comments, notifications, API keys, and integrations you touched. Rate-limited to once per hour. - Erasure:
POST /v1/auth/data-delete/requestfollowed byPOST /v1/auth/data-delete/confirm. The first call emails a single-use token (valid for 24 hours); the second completes the delete. Bugs filed to a shared organization remain as org-owned artifacts but are disassociated from you. - Rectification: update your profile from the console, or email support.
- Objection / restriction: email hi@bugtape.ai.
Cookies and local storage
We aim to keep the surface minimal. On bugtape.ai and the console we use:
- Session JWT (first-party, 1-hour lifetime) and refresh token (30 days) — stored in
localStorageso you stay signed in. Strictly necessary for the console to function. - Console preferences (theme, recent filters, dismissed banners) — stored locally, never transmitted.
- Website analytics — no cookie. The page counter keeps a random visit id in
sessionStorage(gone when the tab closes). The visit counter keepssessionStorage.jv_sid(a random visit id) andsessionStorage.jv_t(last activity time), which start a new visit after 30 minutes without activity and are gone when the tab closes. Only if you opt out:localStorage.bt_pulse_ignore, andlocalStorage.jv_ignoreif you use?jv_ignore=1. - Landing diagnostics choice — optional diagnostic capture starts only after you enable it. We store that choice in
localStorage.bugtape_diagnostics_consent. You can disable diagnostics from the landing page footer.
We do not set tracking cookies, third-party cookies, or advertising identifiers.
Subprocessors
BugTape is hosted on Fly.io (Sydney) with managed Postgres on Neon (AWS ap-southeast-2 region), so report data and the BugTape database stay in Australia. Payments are handled by Stripe. Email is delivered via Resend. AI summaries use OpenAI by default and fall back to Anthropic, then Google AI, if a provider is unavailable — only the relevant event slice is sent, never raw account PII. The full list is on the Trust page.
Data processing agreement
Event retention follows your plan (see the pricing page). If your organisation needs a signed data processing agreement, email hi@bugtape.ai.
Contact
Data protection, privacy, or security questions: hi@bugtape.ai. We aim to respond within 5 business days.