# Forward events to Amplitude
> Send Snowplow events to Amplitude for product analytics and behavioral insights using the HTTP API v2 with support for event tracking and user properties.
> Source: https://docs.snowplow.io/docs/destinations/forwarding-events/integrations/amplitude/
> Documentation index: https://docs.snowplow.io/llms.txt

[Snowplow supported](/docs/destinations/#destinations-catalog "Built and supported by Snowplow") · Paid add-on · Event forwarder · Real time · AWS, Azure, GCP

Send Snowplow events to Amplitude to power product and marketing analytics or guide and survey personalization using Amplitude's [HTTP API v2](https://www.docs.developers.amplitude.com/analytics/apis/http-v2-api/).

## Prerequisites

Before setting up the forwarder in Console, you'll need an Amplitude API Key. To find your API key:

1. Log in to your Amplitude workspace
2. Create an HTTP API source (**Data** > **Sources**)
3. Copy the **API Key** from your source's **Settings** section

> **Tip: Test in a non-production project first**
>
> To avoid introducing bad data in your production Amplitude project, we recommend using a test or development Amplitude project to test your transformations first. Then, create a new Connection in Console with your production API key, and a new forwarder that imports the configuration from your development forwarder.

## Getting started

### Configure the destination

To create the connection and forwarder, follow the steps in [Creating forwarders](/docs/destinations/forwarding-events/creating-forwarders/).

When configuring the connection, select **Amplitude** for the connection type, enter your API key, and select the **Server Location** where your Amplitude project is hosted.

### Validate the integration

You can confirm events are reaching Amplitude by checking the **Ingestion Debugger** page in your Amplitude account:

1. From the left navigation bar, click **Data**, then select **Sources** from the sidebar. You will see a list of sources
2. Select the **Ingestion Debugger** tab
3. Filter the graphs to show only events from the **HTTP API** to confirm data is flowing as expected from Snowplow

## Sending custom properties

You can send custom properties beyond the standard fields defined in the schema reference below. Amplitude supports three types of custom properties:

- **event\_properties**: custom data associated with specific events (e.g., `event_properties.plan_type`, `event_properties.feature_flag`)
- **user\_properties**: custom data tied to user profiles (e.g., `user_properties.subscription_tier`, `user_properties.account_age`)
- **group\_properties**: custom data tied to groups when `event_type` is `$groupidentify` (requires Amplitude Accounts add-on)

For property names containing spaces, use bracket notation (e.g., `event_properties["campaign source"]`).

See Amplitude's [HTTP API v2 documentation](https://amplitude.com/docs/apis/analytics/http-v2#) for details on supported data types, property operations, and object depth limits. See [Creating forwarders](/docs/destinations/forwarding-events/creating-forwarders/) for details on configuring field mappings.

## Schema reference

This section contains information on the fields you can send to Amplitude, including field names, data types, required fields, and default Snowplow mapping expressions.

| Field                                  | Details                                                                                                                                                                                                                                                                                        |
| -------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `event_type` _string_                  | _Required._ A unique identifier for your event.Default mapping: `event?.event_name`                                                                                                                                                                                                            |
| `user_id` _unknown_                    | _Optional._ ID for the user. Required if `device_id` isn't provided.Default mapping: `event?.user_id`                                                                                                                                                                                          |
| `device_id` _unknown_                  | _Optional._ A device-specific identifier, such as the Identifier for Vendor on iOS. Required if `user_id` isn't provided.Default mapping: `event?.domain_userid ?? event?.contexts_com_snowplowanalytics_snowplow_client_session_1?.[0]?.userId`                                               |
| `event_id` _integer_                   | _Optional._ An incrementing counter to distinguish events with the same user\_id and timestamp from each other.                                                                                                                                                                                |
| `session_id` _integer_                 | _Optional._ The start time of the session in milliseconds since epoch (Unix timestamp). Necessary if you want to associate events with a particular system.Default mapping: `spTstampToEpochMillis(event?.contexts_com_snowplowanalytics_snowplow_client_session_1?.[0]?.firstEventTimestamp)` |
| `insert_id` _string_                   | _Optional._ A unique identifier for the event. Amplitude deduplicates subsequent events sent with the same device\_id and insert\_id within the past 7 days.Default mapping: `event?.event_id`                                                                                                 |
| `time` _integer_                       | _Optional._ The timestamp of the event in milliseconds since epoch. If time isn't sent with the event, then it's set to the request upload time.Default mapping: `spTstampToEpochMillis(event?.derived_tstamp)`                                                                                |
| `event_properties` _object_            | _Optional._ Arbitrary key-value pairs assigned to the event.                                                                                                                                                                                                                                   |
| `user_properties` _object_             | _Optional._ Arbitrary key-value pairs assigned to the user.                                                                                                                                                                                                                                    |
| `groups` _object_                      | _Optional._ Arbitrary key-value pairs representing groups of users.                                                                                                                                                                                                                            |
| `group_properties` _object_            | _Optional._ Arbitrary key-value pairs assigned to the groups listed in the `groups`.                                                                                                                                                                                                           |
| `$skip_user_properties_sync` _boolean_ | _Optional._ When true user properties aren't synced. Defaults to false.Default mapping: `false`                                                                                                                                                                                                |
| `app_version` _string_                 | _Optional._ The current version of your application.Default mapping: `event?.contexts_com_snowplowanalytics_mobile_application_1?.[0]?.version`                                                                                                                                                |
| `platform` _string_                    | _Optional._ Platform of the device.Default mapping: `event?.platform`                                                                                                                                                                                                                          |
| `os_name` _string_                     | _Optional._ The name of the mobile operating system or browser that the user is using.Default mapping: `event?.os_name`                                                                                                                                                                        |
| `os_version` _string_                  | _Optional._ The version of the mobile operating system or browser the user is using.Default mapping: `event?.contexts_nl_basjes_yauaa_context_1?.[0]?.operatingSystemVersion`                                                                                                                  |
| `device_brand` _string_                | _Optional._ The device brand that the user is using.Default mapping: `event?.contexts_nl_basjes_yauaa_context_1?.[0]?.deviceBrand`                                                                                                                                                             |
| `device_manufacturer` _string_         | _Optional._ The device manufacturer that the user is using.                                                                                                                                                                                                                                    |
| `device_model` _string_                | _Optional._ The device model that the user is using.Default mapping: `event?.contexts_nl_basjes_yauaa_context_1?.[0]?.deviceName`                                                                                                                                                              |
| `carrier` _string_                     | _Optional._ The carrier that the user is using.Default mapping: `event?.contexts_nl_basjes_yauaa_context_1?.[0]?.carrier`                                                                                                                                                                      |
| `country` _string_                     | _Optional._ The current country of the user.Default mapping: `event?.geo_country`                                                                                                                                                                                                              |
| `region` _string_                      | _Optional._ The current region of the user.Default mapping: `event?.geo_region`                                                                                                                                                                                                                |
| `city` _string_                        | _Optional._ The current city of the user.Default mapping: `event?.geo_city`                                                                                                                                                                                                                    |
| `dma` _string_                         | _Optional._ The current Designated Market Area of the user.                                                                                                                                                                                                                                    |
| `language` _string_                    | _Optional._ The language set by the user.Default mapping: `event?.br_lang`                                                                                                                                                                                                                     |
| `price` _number_                       | _Optional._ The price of the item purchased. Required for revenue data if the revenue field isn't sent. You can use negative values for refunds                                                                                                                                                |
| `quantity` _integer_                   | _Optional._ The quantity of the item purchased.                                                                                                                                                                                                                                                |
| `revenue` _number_                     | _Optional._ Revenue = (price x quantity). If you send all 3 fields of price, quantity, and revenue, then the revenue value is (price x quantity). Use negative values for refunds.                                                                                                             |
| `productId` _string_                   | _Optional._ An identifier for the item purchased. You must send a price and quantity or revenue with this field.                                                                                                                                                                               |
| `revenueType` _string_                 | _Optional._ The type of revenue for the item purchased. You must send a price and quantity or revenue with this field.                                                                                                                                                                         |
| `location_lat` _number_                | _Optional._ The current Latitude of the user.Default mapping: `event?.geo_latitude`                                                                                                                                                                                                            |
| `location_lng` _number_                | _Optional._ The current Longitude of the user.Default mapping: `event?.geo_longitude`                                                                                                                                                                                                          |
| `ip` _string_                          | _Optional._ The IP address of the user.Default mapping: `event?.user_ipaddress`                                                                                                                                                                                                                |
| `idfa` _string_                        | _Optional._ (iOS) Identifier for Advertiser.Default mapping: `event?.contexts_com_snowplowanalytics_snowplow_mobile_context_1?.[0]?.appleIdfa`                                                                                                                                                 |
| `idfv` _string_                        | _Optional._ (iOS) Identifier for Vendor.Default mapping: `event?.contexts_com_snowplowanalytics_snowplow_mobile_context_1?.[0]?.appleIdfv`                                                                                                                                                     |
| `adid` _string_                        | _Optional._ (Android) Google Play Services advertising ID.Default mapping: `event?.contexts_com_snowplowanalytics_snowplow_mobile_context_1?.[0]?.androidIdf`                                                                                                                                  |
| `android_id` _string_                  | _Optional._ (Android) Android ID (not the advertising ID).                                                                                                                                                                                                                                     |
| `plan` _object_                        | _Optional._ Tracking plan properties.Properties:* `branch` (string, optional): The tracking plan branch name.
* `source` (string, optional): The tracking plan source.
* `version` (string, optional): The tracking plan version.                                                              |
