On this page

Instrumentation and governance issues

These questions cover instrumentation governance — what happens to events when you hide, block, or delete them, how to filter internal traffic, and several recurring UI behaviors.

Instrumentation basics

Can values be deleted or altered after ingestion?

Once data is ingested into Amplitude, it cannot be altered. Amplitude's current architecture is based on pre-aggregated sets by the hour, day, week, and month, for both users and events. This allows Amplitude to easily perform large-scale queries, but it does require the data to be immutable.

Data can be deleted at the individual user level in compliance with GDPR and other privacy laws via the User Privacy API. More details on this API can be found here.

How is Device ID set?

Device IDs are set differently when sending client-side events (using Amplitude's SDKs) vs server-side events (HTTP API).

  • SDKs
    • The Device ID for Android is by default randomly generated UUID, unless you opt to use Google's Advertising ID as the Device ID.
    • For iOS SDK, Device IDs are set to the Identifier for Vendor (IDFV) if available; otherwise they are randomly generated. You can choose instead to use the Advertising Identifier (IDFA) as well, if available.
  • Server-side (HTTP API)
    • For server-side events, Device ID must be manually sent in the event. If there is no Device ID available, the Device ID will be set to a randomly-generated hashed version of the user_id. More details here.
    • If the same Device ID set-up is not maintained for server-side events and client-side events, the same user will have different Device IDs even if the device model, language and carrier are the same.

Can two different events have the same name?

No. Each event name must be unique across an entire project. Two events with the same name will be considered the same event. If you notice two events in a project with the same name, it's possible that the display name for one of them was inadvertently set to the same name as another event. You can confirm by expanding the event in Amplitude Data to see more details.

Can array values be sent into Amplitude? Yes. However, Amplitude doesn't support exact matching on array properties. The contains operator can be used to filter for values within an array.

Why is device information (like Device Type or Device Family) returning ‘null’ in my project?

A null value will be returned if Amplitude is unable to parse device information from the device or browser, or if the device is not mapped in Amplitude's system. If you would like new device values to be mapped, please reach out to Amplitude's support team with the following information:

  • Manufacturer (ex: samsung)
  • Model (ex: sm-g930u)
  • Device Family (ex: Samsung Galaxy Phone)
  • Device Type (ex: Samsung Galaxy S7)

Why are my sessions generating new Session ID values?

The events ingested through Amplitude's SDK will maintain the same session if the events are coming from the same device. Session ID changes every time the Device ID changes.

The default session time-out for JavaScript SDK is 30 minutes. For iOS/Android, it's five minutes.

How can recurring revenue subscription events be sent in?

After the first revenue event related to subscription, Apple or Google will have to validate whether or not a subscription is active. If it is, the subscription revenue event should be received by Amplitude at the time interval of that subscription.

How do I filter out bot traffic users?

While Amplitude SDKs use the User Agent to populate some user properties (such as device type), the User Agent itself is not collected or stored. Some customers implement logic to store User Agent as a custom user property and remove bot users that way.

Alternatively, if you're able to determine the IP address of a suspected bot user, you can also use Data Filters to block events from that IP address. To learn more, see Amplitude's help center article on blocking bot web traffic.

Block and filter internal users

To keep data clean on Amplitude, we recommend setting up a development project in conjunction with your production project; test data should be sent to the development project only. However, the necessary step of testing your production environment can send internal data into your production project. Because internal user events can falsely inflate your product's metrics, you must block or filter out these events for accurate reporting.

This article covers some frequently asked questions about preventing internal user data from affecting your metrics.

How do I block specific users?

You can block all internal event data originating from your organization's IP address from ingestion into Amplitude Analytics. Your project's Data Filters page enables you to set up filters for this purpose.

To set up a filter to block events from a specified IP address, follow these steps:

  1. From Data, navigate to Filters and click +Create Block Filter.
  2. In the fly-out panel that appears, choose which environment you want to apply the filter to.
  3. Select Events from the Block drop-down menu.
  4. Choose IP Address and equal to from the two other drop-down menus. Then enter the IP address you wish to block.
  5. Click Block Data.
  6. Repeat steps 4 through 6 for each IP address you want to block.

You must be a manager or admin of your organization to add a data filter.

Once you have this filter set up, all events sent from your list of IP addresses will be dropped upon ingestion.

This filter will not work if you've modified Amplitude's SDK configurations to prevent the collection of IP addresses. It will only drop events that have a collected IP address string that matches the IPs you've blocked.

How do I filter out specific users?

Internal user events can always be segmented out using the Segmentation Module of any Amplitude chart. Simply segment out users by user ID, device ID, Amplitude ID, IP address, or an identifiable user property (e.g. username or email).

How do I save user segments?

You can easily save user segments and pin them to your charts so that you don't need recreate filters every time you want to use them. When you set a saved segment as your default, all new charts you create via the Create Chart or New button will have the default segment automatically applied. The applied filter will then be visible on your chart.

How do I maintain user lists?

Your list of internal users can change over time, and maintaining this list can be time-consuming if your users do not share a common attribute. In these cases, you can take advantage of Amplitude's behavioral cohorts feature and import a cohort of internal users to block on Amplitude.

This cohort can be applied to charts in a similar fashion to user properties. Once you've created a user segment that excludes your internal cohort, save and pin the segment for easy access.

Behavioral cohorts can also be updated programmatically, so your cohort of internal users can be easily maintained. Review the Behavioral Cohorts API for more details.

Hide, block, or delete an event or property

For many customers, the differences between hiding, blocking, and deleting an event or property from your tracking plan aren't immediately clear. For example, hidden or blocked events and properties still count towards your project's instrumentation limit, whereas deleted events and properties don't.

These options will only appear in the menu at the top of Amplitude Data after you select an event or property. The options aren't visible prior to that.

This article answers some frequently asked questions about the similarities and differences between each option.

What is a hidden event or property?

If you don't want your users to query on an event or property in Amplitude charts, but do still want to collect data for that event or property, consider hiding it.

You can hide an event or property from drop-downs, Pathfinder results, and Personas charts:

  • Hiding from drop-downs means you can't select that event or property from drop-down lists in any Amplitude chart.
  • If you hide the event or property from Pathfinder or Personas results, that event aren't included in those chart's calculations. However, Amplitude ingests the data for the event or property, and it's queryable again after you unhide it.

What does blocking an event or property do?

When you block an event or property, you're telling Amplitude you want to continue to query on historical data, but would like to stop collecting new data for that event or property. This can be helpful if a particular event is causing you to hit your monthly event volume limit.

When you do this, Amplitude stops ingesting and processing the event or property. Blocked events and properties ingested prior to blocking are selectable in drop-downs and used in charts. Data from after you create a block doesn't appear in user streams or chart results.

Blocking an event or property doesn't stop you from sending that data to Amplitude, so you still receive a success response when you send it. However Amplitude drops that data before the processing stage, and you can't recover it.

What happens to deleted events and properties?

If you've instrumented an event or property that you no longer need, deleting it helps you keep your data structure organized. Too many unnecessary events and properties can lead to hitting your project's instrumentation limit.

As with blocking, Amplitude doesn't ingest deleted events and properties, and the data sent after deleting an event or property isn't recoverable. The difference is that deleted events and properties aren't available in drop-downs.

Charts that include the now-deleted event or property are available, but you can't include it in any new charts. If you removed the deleted event from a chart, you can't add it back it unless you undelete it. However, deleted events still appear in chart results, so if you'd like to remove/hide data from charts for a deleted event, create a drop filter prior to deleting the event.

What are the differences between hiding, blocking, and deleting?

Table Comparison

Blocked from IngestionAvailable in data exportsAvailable in chart dropdownsCount towards monthly event volume limitCount towards 2000 event type limitIn Govern
BlockedYesNoYesNoYesAll, Blocked
DeletedYesNoNoNoNoDeleted
HiddenNoYesNoYesYesAll, Live, Hidden

Modify or delete historical data

Generally speaking, the Amplitude architecture is based on pre-aggregated sets by the hour, day, week and month for users and events. While this allows the platform to scale well, one tradeoff is immutable data.

This article covers some frequently asked questions about how to modify or delete historical data.

How do I modify events that have already been ingested by Amplitude?

If your account is on a the Growth or Enterprise plan, see Self-service data deletion in Amplitude.

For other account types, direct modification isn't possible, but as a workaround, you can:

  1. Export all project data using the Export API
  2. Clean the data (for example, make the required changes to the data)
  3. Upload the cleaned data into a new project using the Batch API

I updated user properties using the Identify API. Why are there still 'none' values in my charts?

Using the Identify API only updates user property values for future events. You can't change data that Amplitude has already ingested. You need to fire another event for Amplitude to apply the updated property value. More details on how user properties are updated can be found here.

I accidentally sent an event for a user. How do I delete this specific event for this specific user?

You can't. Ingested data is immutable. However, you can try the following process for similar results:

  1. Delete or block the event:
    • This will prevent the event from coming into Amplitude for all users
    • The event will still appear in the users event stream, but will not be available for querying
  2. If that doesn't work, try the workaround described in the first FAQ above.

How do I backfill historical data into Amplitude?

See this Data Backfill Guide.

Date picker behavior

In Amplitude, you use the datepicker to select the timeframe of the analysis you're conducting. In many ways, it's intuitive, as it's something you've most likely seen in other software contexts. You can choose to analyze data collected between two dates, since a specific date, or in the last x days, weeks, or months, where x is a value you select.

However, there are nuances to the way the datepicker understands time.

Offset

When using Last, your queries return the data from the timeframe you specified, as well as the latest, still-incomplete interval.

For example, if you set the datepicker to the last 30 days, Amplitude retrieves data from the last 30 full days, and however many hours have elapsed today.

If you don't want data from the incomplete day, or are using a delayed batch ingestion system, use an offset. To use an offset, click +Offset in the datepicker, then enter the number of days to offset by.

To remove the offset, click 'X' near the Offset by text.

Exclude

When using Since or the Last x days, weeks, or months options, you can also choose to exclude the current day, week, or month. This can be helpful when the entirety of data for the selected timeframe isn't available.

To exclude the incomplete time interval from your chart, click +Exclude in the datepicker and select the Incomplete Interval option. The current date is no longer framed in a dotted line and is excluded from your analysis.

Deselect Incomplete Interval to revert this setting. Use the same process to exclude or include the current week, current month or current quarter.

Amplitude doesn't support using offset and exclude at the same time.

Exclude specific days

You can exclude specific days of the week from your analysis. This is ideal for organizations that operate on custom schedules. For example, retailers can exclude Sundays when stores aren't open or SaaS companies can omit weekends to focus on workweek behavior.

This exclusion affects not only chart visuals but also metric calculations like averages and rolling windows.

Exclude specific days is only supported on the following chart types:

  • Segmentation
  • Funnels
  • Data Tables
  • Retention
  • Sessions

Exclude specific days is only supported for the following time ranges:

  • Last
  • Since

Exclude specific days doesn't work with Period over Period analysis and it doesn't work with realtime intervals.

How Amplitude handles excluded days

When you exclude days, Amplitude:

  • Exclude days removes the days from the calculations and from the chart visualization.
  • For averages, the calculation is done on the valid days in the window. For example, if you are looking at the range Sunday - Saturday (7 days) with Wednesday removed:
    • For non-average time series analysis, the data shows as normal with Wednesday removed.
    • For aggregate data analysis, the data doesn't count the Wednesday in the aggregation,
  • For averaging analysis (such as the rolling window), Amplitude doesn't count the dropped days in the numerator or the denominator. If you have a 7-day rolling window, the data point is treated as a 0 and divide average based on the valid days in the window (6 days in this example).
  • For non-daily or non-hourly intervals analysis, no data is removed from the chart or the table. However, the data still has the underlying days removed.

This method avoids artificially low averages and maintains consistent windowing on charts.

Time input

When using Since or Between, you can narrow the range further by enabling time input. Time input enables you to enter a start time or an end time to add granularity to your analysis.

The datepicker's time input feature is only available for Event Segmentation and Funnel Analysis charts.

To enable time granularity, click +Time in the datepicker. After you enable it, enter the start or end times in hours, minutes, and seconds to accompany your selected date range.

To turn it off, choose click the 'X' near the entered time.

Presets

The datepicker also supports presets to streamline repetitive analysis and ensure consistency across teams.

Using presets

Presets allow quick access to predefined time ranges, including:

  • Last 7 days
  • Last month
  • Year to date
  • Custom fiscal periods

When you select a preset, the datepicker automatically fills in the associated time range.

Custom presets

You can create custom presets for recurring analysis windows like product launches, campaigns, or testing periods. Presets can include:

  • Specific start/end dates
  • Relative timeframes (for example "Last 60 days")
  • Optional exclusions (like incomplete data or specific weekdays)

Amplitude defines presets at the project level, and they're available across the project. Admins and managers can create, edit, and manage these presets in Project Settings.

Default presets

Users can also define their own default preset for a given project. This preset automatically applies when creating new charts.

New orgs can't open the menu

This article covers a frequently asked question about a new organization's limitations within Amplitude.

Why can't new users navigate the left-hand menu?

When a new org is created on Amplitude, all team members will start on the Amplitude Settings page. There will be no option to open the left-hand menu. This can make it seem like the user is "stuck" on the Settings page, or that they cannot navigate to any other page on Amplitude.

This happens because Amplitude cannot populate any charts until it has data to work with. To open the left hand menu, you must first correctly set up your data sources and send data to Amplitude. Once the charts have data to query on, your left menu will uncollapse. You will then be able to navigate through the Amplitude UI.

Firefox ingestion failure

Why is Firefox blocking the Amplitude SDK?

In Firefox, the tracking protection feature is automatically enabled in standard mode. However, Amplitude will not be able to record events when this feature is switched to “strict,” or when a private browser window is being used. This feature blocks trackers for cross-site tracking; its main purpose is to protect user privacy when browsing across the web.

To read more about what tracking protection is and how it affects tracking, read Mozilla’s documentation here.

Because this feature is designed specifically to prevent cross-site tracking, it blocks the Amplitude SDK—Firefox blocks the network requests, which results in events failing ingestion.

The following errors will appear when tracking protection is enabled in the Firefox browser:

Failed POST request.

How do I fix the ingestion issue?

According to the engineering team here at Amplitude, the best solution is to build a proxy server and make the JS SDK point to it. Check out our documentation on how to create a proxy to learn more.

Was this helpful?