---
title: "Data Collected"
description: "See what data is collected by the Sentry JavaScript SDK."
url: https://docs.sentry.io/platforms/javascript/guides/gatsby/data-management/data-collected/
---

# Data Collected | Sentry for Gatsby

Sentry takes data privacy very seriously and has default settings in place that prioritize data safety, especially when it comes to personally identifiable information (PII) data. When you add the Sentry SDK to your application, you allow it to collect data and send it to Sentry during the runtime and build time of your application.

The category types and amount of data collected vary, depending on the integrations you've enabled in the Sentry SDK. This page lists data categories that the Sentry JavaScript SDK collects.

Options to control data collection

You can control many of the categories listed here with the [`dataCollection` option](https://docs.sentry.io/platforms/javascript/guides/gatsby/configuration/options.md#dataCollection), which lets you opt in or out of each data category individually.

By default, the SDK collects all `dataCollection` categories and scrubs values whose keys match the built-in sensitive denylist. To collect less, opt out of a category or restrict it.

Regardless of these options, you can always scrub any data before it's sent to Sentry. See [Scrubbing Sensitive Data](https://docs.sentry.io/platforms/javascript/guides/gatsby/data-management/sensitive-data.md) for details.

## [HTTP Headers](https://docs.sentry.io/platforms/javascript/guides/gatsby/data-management/data-collected.md#http-headers)

By default, the Sentry SDK sends HTTP request and response headers.

Use the `dataCollection.httpHeaders` option to control this. For example, set `dataCollection: { httpHeaders: false }` to disable it, or use `{ allow: [...] }` or `{ deny: [...] }` to restrict which header values are sent. Values whose keys match Sentry's built-in sensitive denylist (such as `auth`, `token`, or `password`) are automatically scrubbed, while the keys are kept.

## [Cookies](https://docs.sentry.io/platforms/javascript/guides/gatsby/data-management/data-collected.md#cookies)

By default, the Sentry SDK sends cookies and scrubs sensitive values (like `token` or `key`). To disable cookie collection, set `dataCollection: { cookies: false }`. You can also restrict which cookie values are sent using `{ allow: [...] }` or `{ deny: [...] }`.

## [Information About Logged-in User](https://docs.sentry.io/platforms/javascript/guides/gatsby/data-management/data-collected.md#information-about-logged-in-user)

By default, the SDK populates user identity fields (`user.id`, `user.email`, `user.username`) from instrumentation. To disable this, set `dataCollection: { userInfo: false }`.

With `userInfo: false`, user identity fields are not sent automatically. Some integrations (e.g. [User Feedback](https://docs.sentry.io/platforms/javascript/guides/gatsby/user-feedback.md)) may still send data like the user ID, username, and email address when explicitly configured.

## [Users' IP Address and Location](https://docs.sentry.io/platforms/javascript/guides/gatsby/data-management/data-collected.md#users-ip-address-and-location)

By default, the SDK sends the user's IP address. To disable it, set [`dataCollection: { userInfo: false }`](https://docs.sentry.io/platforms/javascript/guides/gatsby/configuration/options.md#dataCollection).

In some integrations such as [`handleRequest`](https://docs.sentry.io/platforms/javascript/guides/astro.md#customize-server-instrumentation) in Astro, the user's IP address can also be sent by enabling `trackClientIp`.

If sending the IP address is enabled we will try to infer the IP address or use the IP address provided by `ip_address` in [`Sentry.setUser()`](https://docs.sentry.io/platforms/javascript/guides/gatsby/apis.md#setUser). If you set `ip_address: null`, the IP address won't be inferred.

Even when this is disabled, IP addresses can still reach Sentry through collected HTTP headers, cookies, or query parameters (for example, the `X-Forwarded-For` header). Add these terms to the partially-matched deny lists for those categories so their values are filtered:

```JavaScript
Sentry.init({
  dsn: "https://<key>@o<orgId>.ingest.sentry.io/<projectId>",
  dataCollection: {
    httpHeaders: { deny: ["forwarded", "-ip", "remote-", "via", "-user"] },
    cookies: { deny: ["forwarded", "-ip", "remote-", "via", "-user"] },
    urlQueryParams: { deny: ["forwarded", "-ip", "remote-", "via", "-user"] },
  },
});
```

## [Request URL](https://docs.sentry.io/platforms/javascript/guides/gatsby/data-management/data-collected.md#request-url)

The full request URL of outgoing and incoming HTTP requests is **always sent to Sentry**. Depending on your application, this could contain PII data. For example, a URL like `/users/1234/details`, where `1234` is a user id (which may be considered PII).

## [Request Query String](https://docs.sentry.io/platforms/javascript/guides/gatsby/data-management/data-collected.md#request-query-string)

By default, the full request query string of outgoing and incoming HTTP requests is sent to Sentry. Depending on your application, this could contain PII data. For example, a query string like `?user_id=1234`, where `1234` is a user id (which may be considered PII).

Use the `dataCollection.urlQueryParams` option to control this. Set it to `false` to disable collection entirely, or use `{ allow: [...] }` / `{ deny: [...] }` to filter which values are sent. Values whose keys match the built-in sensitive denylist (terms like `auth`, `token`, `password`, and `secret`) are scrubbed automatically.

Sentry also has some additional [server-side data scrubbing](https://docs.sentry.io/security-legal-pii/scrubbing/server-side-scrubbing.md) in place to remove sensitive data from the query string.

## [Request Body](https://docs.sentry.io/platforms/javascript/guides/gatsby/data-management/data-collected.md#request-body)

By default, incoming and outgoing request bodies are collected. To disable body collection, set `dataCollection: { httpBodies: [] }`. You can also collect only specific body types by providing a subset: `"incomingRequest"`, `"outgoingRequest"`, `"incomingResponse"`, and `"outgoingResponse"`.

```js
Sentry.init({
  dsn: "https://<key>@o<orgId>.ingest.sentry.io/<projectId>",
  dataCollection: {
    httpBodies: ["incomingRequest", "outgoingRequest"],
  },
});
```

If you disable body collection, Sentry only sends the body size inferred from the `content-length` header, not the body content itself.

## [Response Body](https://docs.sentry.io/platforms/javascript/guides/gatsby/data-management/data-collected.md#response-body)

By default, incoming and outgoing response bodies are collected. To disable response body collection, set `dataCollection: { httpBodies: [] }` (which disables all body types), or provide a subset that excludes the response types.

If you disable response body collection, Sentry only sends the response body size based on the `content-length` header, not the content itself.

## [Source Context](https://docs.sentry.io/platforms/javascript/guides/gatsby/data-management/data-collected.md#source-context)

By default, SDKs set up by the Sentry CLI Wizard (`@sentry/wizard`) will enable uploading source maps to Sentry.

To disable source map upload, see [the Source Maps documentation](https://docs.sentry.io/platforms/javascript/guides/gatsby/sourcemaps.md).

## [Local Variables In Stack Trace](https://docs.sentry.io/platforms/javascript/guides/gatsby/data-management/data-collected.md#local-variables-in-stack-trace)

The Sentry SDK does not send local variables in the error stack trace in client-side JavaScript SDKs.

## [Device, Browser, OS and Runtime Information](https://docs.sentry.io/platforms/javascript/guides/gatsby/data-management/data-collected.md#device-browser-os-and-runtime-information)

By default, the Sentry SDK sends information about the device and runtime to Sentry.

In browser environments, this information is obtained by the User Agent string. The User Agent string contains information about the browser, operating system, and device type.

In server-side environments, the Sentry SDK uses the `os` module to get information about the operating system and architecture.

## [Session Replay](https://docs.sentry.io/platforms/javascript/guides/gatsby/data-management/data-collected.md#session-replay)

By default, our Session Replay SDK masks all text content, images, web views, and user input. This helps ensure that no sensitive data is exposed. You can find [more details in the Session Replay documentation](https://docs.sentry.io/platforms/javascript/guides/gatsby/session-replay/privacy.md).

The `dataCollection` option doesn't affect Session Replay. Because Replay is opt-in by default (it masks everything unless you allow it), while `dataCollection` is opt-out, the two use opposite privacy models. To avoid changing behavior on a privacy-sensitive feature, Replay's masking and network capture are controlled exclusively by the Replay integration's own [privacy options](https://docs.sentry.io/platforms/javascript/guides/gatsby/session-replay/privacy.md), regardless of your `dataCollection` settings.

Session Replay also captures basic information about all outgoing fetch and XHR requests in your application. This includes the URL, request and response body size, method, and status code. If [`networkDetailAllowUrls`](https://docs.sentry.io/platforms/javascript/guides/gatsby/session-replay/configuration.md#network-details) are defined, the request and response body will be sent to Sentry as well. This can include PII data if the request or response body contains PII information.

Console messages are also captured by default in Session Replay. To scrub console messages, you can use the [`beforeAddRecordingEvent`](https://docs.sentry.io/platforms/javascript/guides/gatsby/session-replay/privacy.md#custom-scrubbing) option to filter console messages before they are sent to Sentry.

## [Console Logs](https://docs.sentry.io/platforms/javascript/guides/gatsby/data-management/data-collected.md#console-logs)

By default, the Sentry SDK sends JS console logs to Sentry as breadcrumbs which may contain PII data.

To disable sending console messages, remove the `Console` integration from your `integrations` config, see [the Console documentation](https://docs.sentry.io/platforms/javascript/guides/gatsby/configuration/integrations/console.md).

## [Referrer URL](https://docs.sentry.io/platforms/javascript/guides/gatsby/data-management/data-collected.md#referrer-url)

By default, the Sentry SDK sends the referrer URL to Sentry. This is the URL of the page that linked to the current page.

## [GraphQL Operations](https://docs.sentry.io/platforms/javascript/guides/gatsby/data-management/data-collected.md#graphql-operations)

When you use a GraphQL integration, the Sentry SDK sends the operation name and the operation type to Sentry.

By default, the SDK also sends the GraphQL document (the query or mutation source text) and the variables passed to the operation by default. This data can include PII. Use the `dataCollection.graphQL` option (available since version `10.66.0`) to control it:

```JavaScript
Sentry.init({
  dsn: "https://<key>@o<orgId>.ingest.sentry.io/<projectId>",
  dataCollection: {
    graphQL: {
      document: false,
      variables: false,
    },
  },
});
```

## [LLM Inputs And Responses](https://docs.sentry.io/platforms/javascript/guides/gatsby/data-management/data-collected.md#llm-inputs-and-responses)

When using AI integrations, metadata like model ID and used tokens is sent to Sentry.

The content of generative AI inputs (system instructions, prompt messages, tool definitions, and tool call arguments) and outputs (such as completion text and tool call results) might carry personal data. By default, the SDK records both inputs and outputs. Metadata like model ID and token counts is always collected.

The same setting applies to MCP servers instrumented with `wrapMcpServerWithSentry`. By default, the SDK records the inputs and outputs of tool calls, prompt retrievals, and resource reads. Use the wrapper's `recordInputs` and `recordOutputs` options to control recording per server.

Use the `dataCollection.genAI` option to control this. For example, opt out of recording AI message content while keeping the metadata:

```JavaScript
Sentry.init({
  dsn: "https://<key>@o<orgId>.ingest.sentry.io/<projectId>",
  dataCollection: {
    genAI: {
      inputs: false,
      outputs: false,
    },
  },
});
```
