Repository: amplitude/amplitude-docs
Pull request #658: Update data-model.md
Author: login: akhil-prakash
Created: 2025-04-25T17:39:05Z | Merged: 2025-04-29T17:44:21Z

@markzegarelli 

1. We support account level bucketing at analysis for all the Experiment SDKs. Do I just copy paste what is in the JavaScript docs to all the other languages and change the syntax to match the language? This is what is in the Javascript docs https://amplitude.com/docs/sdks/experiment-sdks/experiment-javascript#user-provider
2. Should we add something here about supporting accounts add on in Experiment and Experiment Results even though it is in Beta? https://amplitude.com/docs/analytics/account-level-reporting
3. https://amplitude.com/docs/analytics/account-level-reporting-setup This article seems to suggest that accounts add on is only supported on Android, iOS, and JavaScript. But groups exists in the Go SDK https://amplitude.com/docs/sdks/analytics/go/go-sdk and the Python SDK https://amplitude.com/docs/sdks/analytics-sdks/python/python-sdk for example. Should that list get updated with all the SDKs? Looks like all the SDKs support groups except for Unreal https://amplitude.com/docs/sdks/analytics/unreal/unreal-sdk but I would double check with someone on the SDK team. 


Diff:
diff --git a/content/collections/analytics/en/account-level-reporting.md b/content/collections/analytics/en/account-level-reporting.md
index 9aeb64dc9..a2c16d3cd 100644
--- a/content/collections/analytics/en/account-level-reporting.md
+++ b/content/collections/analytics/en/account-level-reporting.md
@@ -68,6 +68,17 @@ For example, if you wanted to track the number of daily active organizations and
 
 ![segmentby_grpids.png](/docs/output/img/analytics/segmentby_grpids.png)
 
+### Groups in Experiment
+
+{{partial:admonition type="beta" heading=""}}
+There are two usages of groups in experiment:  
+
+1. What property do you want to randomize on  
+2. What unit you want to analyze on  
+
+For example, as a B2B company you may want to randomize by customer id and analyze by customer id. If you are analyzing an onboarding funnel, you might not care if one person does step 1 and another person does step 2 as long as they are part of the same company. See [this](/docs/feature-experiment/data-model#users) for how to evaluate groups and group properties. See [this](/docs/feature-experiment/overview) for how to set the bucketing unit.
+{{/partial:admonition}}
+
 ### Create group-level behavioral cohorts
 
 To create a group-level [behavioral cohort](/docs/analytics/behavioral-cohorts), use the dropdown on the left to specify if you want to create a cohort out of one of your groups.
diff --git a/content/collections/experiment-sdks/en/experiment-android.md b/content/collections/experiment-sdks/en/experiment-android.md
index b55979c91..0bd01fc39 100644
--- a/content/collections/experiment-sdks/en/experiment-android.md
+++ b/content/collections/experiment-sdks/en/experiment-android.md
@@ -406,6 +406,75 @@ In the case of **user properties**, Amplitude recommends passing new user proper
 
 If `fetch()` times out (default 10 seconds) or fails for any reason, the SDK client will return and retry in the background with back-off. You may configure the timeout or disable retries in the [configuration options](#configuration) when the SDK client is initialized.
 
+{{partial:collapse name="Account-level bucketing and analysis (v1.9.0+)"}}
+If your organization has purchased the [Accounts add-on](/docs/analytics/account-level-reporting) you may perform bucketing and analysis on groups rather than users. Reach out to your representative to gain access to this beta feature.
+
+Groups must either be included in the user sent with the fetch request (recommended), or identified with the user via a group identify call from the [Group Identify API](/docs/apis/analytics/group-identify) or via [`setGroup()` from an analytics SDK](/docs/sdks/analytics/browser/browser-sdk-2#user-groups).
+
+{{partial:tabs tabs="Java, Kotlin"}}
+{{partial:tab name="Java"}}
+```java
+try {
+    ExperimentUser user = ExperimentUser.builder()
+        .userId("user@company.com")
+        .userProperty("premium", true)
+        .group("org name", ["Amplitude"])
+        .build();
+    experiment.fetch(user).get();
+} catch (Exception e) {
+    e.printStackTrace();
+}
+```
+{{/partial:tab}}
+{{partial:tab name="Kotlin"}}
+```kotlin
+try {
+    val user = ExperimentUser.builder()
+        .userId("user@company.com")
+        .userProperty("premium", true)
+        .group("org name", ["Amplitude"])
+        .build()
+    experiment.fetch(user).get()
+} catch (e: Exception) {
+    e.printStackTrace()
+}
+```
+{{/partial:tab}}
+
+To pass freeform group properties, see this example:
+
+{{partial:tabs tabs="Java, Kotlin"}}
+{{partial:tab name="Java"}}
+```java
+try {
+    ExperimentUser user = ExperimentUser.builder()
+        .userId("user@company.com")
+        .userProperty("premium", true)
+        .groupProperty("org name", ["Amplitude"])
+        .build();
+    experiment.fetch(user).get();
+} catch (Exception e) {
+    e.printStackTrace();
+}
+```
+{{/partial:tab}}
+{{partial:tab name="Kotlin"}}
+```kotlin
+try {
+    val user = ExperimentUser.builder()
+        .userId("user@company.com")
+        .userProperty("premium", true)
+        .groupProperty("org name", ["Amplitude"])
+        .build()
+    experiment.fetch(user).get()
+} catch (e: Exception) {
+    e.printStackTrace()
+}
+```
+{{/partial:tab}}
+
+{{/partial:collapse}}
+
 ## Start
 
 {{partial:admonition type="info" heading="Fetch vs start"}}
diff --git a/content/collections/experiment-sdks/en/experiment-go.md b/content/collections/experiment-sdks/en/experiment-go.md
index 96317249a..03a5980c1 100644
--- a/content/collections/experiment-sdks/en/experiment-go.md
+++ b/content/collections/experiment-sdks/en/experiment-go.md
@@ -139,6 +139,43 @@ if variant.Value == "on" {
 }
 ```
 
+{{partial:collapse name="Account-level bucketing and analysis (v1.7.0+)"}}
+If your organization has purchased the [Accounts add-on](/docs/analytics/account-level-reporting) you may perform bucketing and analysis on groups rather than users. Reach out to your representative to gain access to this beta feature.
+
+Groups must either be included in the user sent with the fetch request (recommended), or identified with the user via a group identify call from the [Group Identify API](/docs/apis/analytics/group-identify) or via [`setGroup()` from an analytics SDK](/docs/sdks/analytics/browser/browser-sdk-2#user-groups).
+
+```go
+user := &experiment.User{
+    UserId:   "user@company.com",
+    DeviceId: "abcdefg",
+    UserProperties: map[string]interface{}{
+        "premium": true,
+    },
+    Groups: map[string]interface{}(
+      "org name": ["Amplitude"]
+    )
+}
+variants, err := client.Fetch(user)
+```
+
+To pass freeform group properties, see this example:
+
+```go
+user := &experiment.User{
+    UserId:   "user@company.com",
+    DeviceId: "abcdefg",
+    UserProperties: map[string]interface{}{
+        "premium": true,
+    },
+    GroupsProperties: map[string]interface{}(
+      "org name": ["Amplitude"]
+    )
+}
+variants, err := client.Fetch(user)
+```
+
+{{/partial:collapse}}
+
 ## Local evaluation
 
 Implements evaluating variants for a user via [local evaluation](/docs/feature-experiment/local-evaluation). If you plan on using local evaluation, you should [understand the tradeoffs](/docs/feature-experiment/local-evaluation#targeting-capabilities).
diff --git a/content/collections/experiment-sdks/en/experiment-ios.md b/content/collections/experiment-sdks/en/experiment-ios.md
index 4166137c3..85fdd68a3 100644
--- a/content/collections/experiment-sdks/en/experiment-ios.md
+++ b/content/collections/experiment-sdks/en/experiment-ios.md
@@ -319,6 +319,33 @@ In the case of **user properties**, Amplitude recommends passing new user proper
 
 If `fetch()` times out (default 10 seconds) or fails for any reason, the SDK client will return and retry in the background with back-off. You may configure the timeout or disable retries in the [configuration options](#configuration) when the SDK client is initialized.
 
+{{partial:collapse name="Account-level bucketing and analysis (v1.10.0+)"}}
+If your organization has purchased the [Accounts add-on](/docs/analytics/account-level-reporting) you may perform bucketing and analysis on groups rather than users. Reach out to your representative to gain access to this beta feature.
+
+Groups must either be included in the user sent with the fetch request (recommended), or identified with the user via a group identify call from the [Group Identify API](/docs/apis/analytics/group-identify) or via [`setGroup()` from an analytics SDK](/docs/sdks/analytics/browser/browser-sdk-2#user-groups).
+
+```swift
+let user = ExperimentUserBuilder()
+    .userId(userId)
+    .deviceId(deviceId)
+    .group("org name", ["Amplitude"])
+    .build()
+experiment.fetch(user: user, completion: nil)
+```
+
+To pass freeform group properties, see this example:
+
+```swift
+let user = ExperimentUserBuilder()
+    .userId(userId)
+    .deviceId(deviceId)
+    .groupProperty("org name", ["Amplitude"])
+    .build()
+experiment.fetch(user: user, completion: nil)
+```
+
+{{/partial:collapse}}
+
 ## Start
 
 {{partial:admonition type="info" heading="Fetch vs start"}}
diff --git a/content/collections/experiment-sdks/en/experiment-jvm.md b/content/collections/experiment-sdks/en/experiment-jvm.md
index b6d623497..f4490c1bf 100644
--- a/content/collections/experiment-sdks/en/experiment-jvm.md
+++ b/content/collections/experiment-sdks/en/experiment-jvm.md
@@ -534,6 +534,75 @@ if (Variant.valueEquals(variant, "on")) {
 {{/partial:tab}}
 {{/partial:tabs}}
 
+{{partial:collapse name="Account-level bucketing and analysis (v1.3.0+)"}}
+If your organization has purchased the [Accounts add-on](/docs/analytics/account-level-reporting) you may perform bucketing and analysis on groups rather than users. Reach out to your representative to gain access to this beta feature.
+
+Groups must either be included in the user sent with the fetch request (recommended), or identified with the user via a group identify call from the [Group Identify API](/docs/apis/analytics/group-identify) or via [`setGroup()` from an analytics SDK](/docs/sdks/analytics/browser/browser-sdk-2#user-groups).
+
+{{partial:tabs tabs="Java, Kotlin"}}
+{{partial:tab name="Java"}}
+```java
+try {
+    ExperimentUser user = ExperimentUser.builder()
+        .userId("user@company.com")
+        .userProperty("premium", true)
+        .group("org name", ["Amplitude"])
+        .build();
+    experiment.fetch(user).get();
+} catch (Exception e) {
+    e.printStackTrace();
+}
+```
+{{/partial:tab}}
+{{partial:tab name="Kotlin"}}
+```kotlin
+try {
+    val user = ExperimentUser.builder()
+        .userId("user@company.com")
+        .userProperty("premium", true)
+        .group("org name", ["Amplitude"])
+        .build()
+    experiment.fetch(user).get()
+} catch (e: Exception) {
+    e.printStackTrace()
+}
+```
+{{/partial:tab}}
+
+To pass freeform group properties, see this example:
+
+{{partial:tabs tabs="Java, Kotlin"}}
+{{partial:tab name="Java"}}
+```java
+try {
+    ExperimentUser user = ExperimentUser.builder()
+        .userId("user@company.com")
+        .userProperty("premium", true)
+        .groupProperty("org name", ["Amplitude"])
+        .build();
+    experiment.fetch(user).get();
+} catch (Exception e) {
+    e.printStackTrace();
+}
+```
+{{/partial:tab}}
+{{partial:tab name="Kotlin"}}
+```kotlin
+try {
+    val user = ExperimentUser.builder()
+        .userId("user@company.com")
+        .userProperty("premium", true)
+        .groupProperty("org name", ["Amplitude"])
+        .build()
+    experiment.fetch(user).get()
+} catch (e: Exception) {
+    e.printStackTrace()
+}
+```
+{{/partial:tab}}
+
+{{/partial:collapse}}
+
 ### Local evaluation cohort targeting
 
 Since version `1.4.0`, the local evaluation SDK client supports downloading cohorts for local evaluation targeting. Configure the SDK using `cohortSyncConfig` with the analytics `apiKey` and `secretKey` on initialization to enable this support.
diff --git a/content/collections/experiment-sdks/en/experiment-node-js.md b/content/collections/experiment-sdks/en/experiment-node-js.md
index 6dbb5da47..5085145e1 100644
--- a/content/collections/experiment-sdks/en/experiment-node-js.md
+++ b/content/collections/experiment-sdks/en/experiment-node-js.md
@@ -209,6 +209,37 @@ const variants = experiment.evaluateV2(user);
 ```
 {{/partial:admonition}}
 
+{{partial:collapse name="Account-level bucketing and analysis (v1.5.0+)"}}
+If your organization has purchased the [Accounts add-on](/docs/analytics/account-level-reporting) you may perform bucketing and analysis on groups rather than users. Reach out to your representative to gain access to this beta feature.
+
+Groups must either be included in the user sent with the fetch request (recommended), or identified with the user via a group identify call from the [Group Identify API](/docs/apis/analytics/group-identify) or via [`setGroup()` from an analytics SDK](/docs/sdks/analytics/browser/browser-sdk-2#user-groups).
+
+```js
+await fetch({
+    user_id: 'user@company.com',
+    device_id: 'abcdefg',
+    user_properties: {
+        'premium': true,
+    },
+    groups: {'org name': ['Amplitude']}
+});
+```
+
+To pass freeform group properties, see this example:
+
+```js
+await fetch({
+    user_id: 'user@company.com',
+    device_id: 'abcdefg',
+    user_properties: {
+        'premium': true,
+    },
+    group_properties: {'org name': ['Amplitude']}
+});
+```
+
+{{/partial:collapse}}
+
 ### Initialize Local
 
 Initializes a [local evaluation](/docs/feature-experiment/local-evaluation) client.
diff --git a/content/collections/experiment-sdks/en/experiment-php.md b/content/collections/experiment-sdks/en/experiment-php.md
index f3e01a0e8..71444140b 100644
--- a/content/collections/experiment-sdks/en/experiment-php.md
+++ b/content/collections/experiment-sdks/en/experiment-php.md
@@ -135,6 +135,37 @@ if ($variant) {
 }
 ```
 
+{{partial:collapse name="Account-level bucketing and analysis (v1.0.0+)"}}
+If your organization has purchased the [Accounts add-on](/docs/analytics/account-level-reporting) you may perform bucketing and analysis on groups rather than users. Reach out to your representative to gain access to this beta feature.
+
+Groups must either be included in the user sent with the fetch request (recommended), or identified with the user via a group identify call from the [Group Identify API](/docs/apis/analytics/group-identify) or via [`setGroup()` from an analytics SDK](/docs/sdks/analytics/browser/browser-sdk-2#user-groups).
+
+```php
+<?php
+$user = \AmplitudeExperiment\User::builder()
+    ->deviceId('abcdefg')
+    ->userId('user@company.com')
+    ->userProperties(['premium' => true])
+    ->group(['org name' => ['Amplitude']])
+    ->build();
+$variants = $client->fetch($user);
+```
+
+To pass freeform group properties, see this example:
+
+```php
+<?php
+$user = \AmplitudeExperiment\User::builder()
+    ->deviceId('abcdefg')
+    ->userId('user@company.com')
+    ->userProperties(['premium' => true])
+    ->groupProperties(['org name' => ['Amplitude']])
+    ->build();
+$variants = $client->fetch($user);
+```
+
+{{/partial:collapse}}
+
 ## Local evaluation
 
 Implements evaluation of variants for a user through [local evaluation](/docs/feature-experiment/local-evaluation). If you plan to use local evaluation, you should [understand the tradeoffs](/docs/feature-experiment/local-evaluation#targeting-capabilities).
diff --git a/content/collections/experiment-sdks/en/experiment-python.md b/content/collections/experiment-sdks/en/experiment-python.md
index 1b85e57a1..493e3e9e1 100644
--- a/content/collections/experiment-sdks/en/experiment-python.md
+++ b/content/collections/experiment-sdks/en/experiment-python.md
@@ -167,6 +167,39 @@ def fetch_callback(user, variants):
 experiment.fetch_async_v2(user, fetch_callback)
 ```
 
+{{partial:collapse name="Account-level bucketing and analysis (v1.3.0+)"}}
+If your organization has purchased the [Accounts add-on](/docs/analytics/account-level-reporting) you may perform bucketing and analysis on groups rather than users. Reach out to your representative to gain access to this beta feature.
+
+Groups must either be included in the user sent with the fetch request (recommended), or identified with the user via a group identify call from the [Group Identify API](/docs/apis/analytics/group-identify) or via [`setGroup()` from an analytics SDK](/docs/sdks/analytics/browser/browser-sdk-2#user-groups).
+
+```python
+user = User(
+    device_id="abcdefg",
+    user_id="user@company.com",
+    user_properties={
+        'premium': True
+    },
+    groups={"org name": ["Amplitude"]}
+)
+variants = experiment.fetch_v2(user)
+```
+
+To pass freeform group properties, see this example:
+
+```python
+user = User(
+    device_id="abcdefg",
+    user_id="user@company.com",
+    user_properties={
+        'premium': True
+    },
+    group_properties={"org name": ["Amplitude"]}
+)
+variants = experiment.fetch_v2(user)
+```
+
+{{/partial:collapse}}
+
 ## Local evaluation
 
 Implements evaluating variants for a user via [local evaluation](/docs/feature-experiment/local-evaluation). If you plan on using local evaluation, you should [understand the tradeoffs](/docs/feature-experiment/local-evaluation#targeting-capabilities).
diff --git a/content/collections/experiment-sdks/en/experiment-react-native.md b/content/collections/experiment-sdks/en/experiment-react-native.md
index b9cb9b3f3..3d293f19e 100644
--- a/content/collections/experiment-sdks/en/experiment-react-native.md
+++ b/content/collections/experiment-sdks/en/experiment-react-native.md
@@ -295,6 +295,37 @@ In the case of **user properties**, Amplitude recommends passing new user proper
 
 If `fetch()` times out (default 10 seconds) or fails for any reason, the SDK client will return and retry in the background with back-off. You may configure the timeout or disable retries in the [configuration options](#configuration) when the SDK client is initialized.
 
+{{partial:collapse name="Account-level bucketing and analysis (v1.1.0+)"}}
+If your organization has purchased the [Accounts add-on](/docs/analytics/account-level-reporting) you may perform bucketing and analysis on groups rather than users. Reach out to your representative to gain access to this beta feature.
+
+Groups must either be included in the user sent with the fetch request (recommended), or identified with the user via a group identify call from the [Group Identify API](/docs/apis/analytics/group-identify) or via [`setGroup()` from an analytics SDK](/docs/sdks/analytics/browser/browser-sdk-2#user-groups).
+
+```js
+await fetch({
+    user_id: 'user@company.com',
+    device_id: 'abcdefg',
+    user_properties: {
+        'premium': true,
+    },
+    groups: {'org name': ['Amplitude']}
+});
+```
+
+To pass freeform group properties, see this example:
+
+```js
+await fetch({
+    user_id: 'user@company.com',
+    device_id: 'abcdefg',
+    user_properties: {
+        'premium': true,
+    },
+    group_properties: {'org name': ['Amplitude']}
+});
+```
+
+{{/partial:collapse}}
+
 ## Start
 
 {{partial:admonition type="info" heading="Fetch vs start"}}
diff --git a/content/collections/experiment-sdks/en/experiment-ruby.md b/content/collections/experiment-sdks/en/experiment-ruby.md
index a8d183ddd..8e559e512 100644
--- a/content/collections/experiment-sdks/en/experiment-ruby.md
+++ b/content/collections/experiment-sdks/en/experiment-ruby.md
@@ -181,6 +181,43 @@ experiment.fetch_async(user) do |_, variants|
 end
 ```
 
+{{partial:collapse name="Account-level bucketing and analysis (v1.4.0+)"}}
+If your organization has purchased the [Accounts add-on](/docs/analytics/account-level-reporting) you may perform bucketing and analysis on groups rather than users. Reach out to your representative to gain access to this beta feature.
+
+Groups must either be included in the user sent with the fetch request (recommended), or identified with the user via a group identify call from the [Group Identify API](/docs/apis/analytics/group-identify) or via [`setGroup()` from an analytics SDK](/docs/sdks/analytics/browser/browser-sdk-2#user-groups).
+
+```ruby
+user = AmplitudeExperiment::User.new(
+    user_id: 'user@company.com',
+    device_id: 'abcdefg',
+    user_properties: {
+        'premium' => true
+    },
+    groups: {
+      'org name' => ['Amplitude']
+    }
+)
+variants = experiment.fetch(user)
+```
+
+To pass freeform group properties, see this example:
+
+```ruby
+user = AmplitudeExperiment::User.new(
+    user_id: 'user@company.com',
+    device_id: 'abcdefg',
+    user_properties: {
+        'premium' => true
+    },
+    group_properties: {
+      'org name' => ['Amplitude']
+    }
+)
+variants = experiment.fetch(user)
+```
+
+{{/partial:collapse}}
+
 ## Local evaluation
 
 Implements evaluating variants for a user via [local evaluation](/docs/feature-experiment/local-evaluation). If you plan on using local evaluation, you should [understand the tradeoffs](/docs/feature-experiment/local-evaluation#targeting-capabilities).
diff --git a/content/collections/experiment/en/data-model.md b/content/collections/experiment/en/data-model.md
index 3e87d666c..962f6d513 100644
--- a/content/collections/experiment/en/data-model.md
+++ b/content/collections/experiment/en/data-model.md
@@ -86,23 +86,35 @@ Pass users to evaluation via `fetch` requests for [remote evaluation](/docs/feat
 **You must include either a user ID or device ID in the user object for evaluation to succeed.** For example, remote evaluation returns a 400 error if both the User ID and Device ID are null, empty, or missing.
 
 {{/partial:admonition}}
-| <div class='med-big-column'> Property </div> | Type     | Description                                                                                                                                                                                                                                                                                                                                                                                                                                       |
-| -------------------------------------------- | -------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
-| `user_id`                                    | `string` | The [User ID](/docs/get-started/identify-users) is the primary identifier for the user. This value is typically their user ID within your system Experiment uses the User ID when resolving the Amplitude ID on enrichment before [remote evaluation](/docs/feature-experiment/remote-evaluation) where the Amplitude ID is the default bucketing key. |
-| `device_id`                                  | `string` | The Device ID is the secondary identifier for the user. This is usually randomly generated by an analytics SDK on the client side or set in a cookie on the server side. The Device ID is also used when resolving the Amplitude ID on enrichment before [remote evaluation](/docs/feature-experiment/remote-evaluation) where the Amplitude ID is the default bucketing key.                                                                     |
-| `user_properties`                            | `object` | Optional object of custom properties used when evaluating the user during local or remote evaluation.                                                                                                                                                                                                                                                                                                                                             |
-| `groups`                                     | `object` | Beta. Optional object that lists groups associated with this user. Format is an object where the key is the group type, and the value is an array of group value strings (for example, `{"org name":["Amplitude"]}`)                                                                                                                                                                                                                              |
-| `group_properties`                           | `object` | Beta. Optional object listing group properties associated with this user. Format is an nested object where the key is the group type, and the value is an object where the key is a the group value, and the value is an object of properties (for example,`{"org name":{"Amplitude":{"plan":"enterprise"}}}`)                                                                                                                                    |
-
+| <div class='med-big-column'> Property </div> | Type     | Description                                                                                                                                                                                                                                                                                                                                                                   |
+| -------------------------------------------- | -------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `user_id`                                    | `string` | The [User ID](/docs/get-started/identify-users) is the primary identifier for the user. This value is typically their user ID within your system Experiment uses the User ID when resolving the Amplitude ID on enrichment before [remote evaluation](/docs/feature-experiment/remote-evaluation) where the Amplitude ID is the default bucketing key.                        |
+| `device_id`                                  | `string` | The Device ID is the secondary identifier for the user. This is usually randomly generated by an analytics SDK on the client side or set in a cookie on the server side. The Device ID is also used when resolving the Amplitude ID on enrichment before [remote evaluation](/docs/feature-experiment/remote-evaluation) where the Amplitude ID is the default bucketing key. |
+| `user_properties`                            | `object` | Optional object of custom properties used when evaluating the user during local or remote evaluation.                                                                                                                                                                                                                                                                         |
+| `groups`                                     | `object` | Beta. Optional object that lists groups associated with this user. Format is an object where the key is the group type, and the value is an array of group value strings (for example, `{"org name":["Amplitude"]}`)                                                                                                                                                          |
+| `group_properties`                           | `object` | Beta. Optional object listing group properties associated with this user. Format is an nested object where the key is the group type, and the value is an object where the key is a the group value, and the value is an object of properties (for example,`{"org name":{"Amplitude":{"plan":"enterprise"}}}`)                                                                |
 
 {{partial:admonition type="beta" heading=""}}
+
 If your organization has purchased the [Accounts add-on](/docs/analytics/account-level-reporting) you may perform bucketing and analysis on groups rather than users. Reach out to your representative to gain access to this beta feature.
 
 Groups must be included in the user sent with the fetch request (recommended), or identified with the user via a group identify call from the [Group Identify API](/docs/apis/analytics/group-identify) or with [`setGroup()` from an analytics SDK](/docs/sdks/analytics/browser/browser-sdk-2#user-groups).
 
-Supported Experiment SDKs:
+All Experiment SDKs support groups, with minimum versions described in the following table:
+
+| SDK                                                                | Minimum version |
+| ------------------------------------------------------------------ | --------------- |
+| [Android](/docs/sdks/experiment-sdks/experiment-android)           | 1.9.0           |
+| [iOS](/docs/sdks/experiment-sdks/experiment-ios)                   | 1.10.0          |
+| [React Native](/docs/sdks/experiment-sdks/experiment-react-native) | 1.1.0           |
+| [JavaScript](/docs/sdks/experiment-sdks/experiment-javascript)     | 1.5.6           |
+| [Ruby](/docs/sdks/experiment-sdks/experiment-ruby)                 | 1.4.0           |
+| [Go](/docs/sdks/experiment-sdks/experiment-go)                     | 1.7.0           |
+| [Python](/docs/sdks/experiment-sdks/experiment-python)             | 1.3.0           |
+| [JVM](/docs/sdks/experiment-sdks/experiment-jvm)                   | 1.3.0           |
+| [Node](/docs/sdks/experiment-sdks/experiment-node-js)              | 1.5.0           |
+| [PHP](/docs/sdks/experiment-sdks/experiment-php)                   | 1.0.0           |
 
-* [JavaScript](/docs/sdks/experiment-sdks/experiment-javascript#fetch)
 {{/partial:admonition}}
 
 ### Full user definition


Reviews:
user: login: tyiuhc
state: COMMENTED
author_association: CONTRIBUTOR
submitted_at: 2025-04-25T18:45:51Z
user: login: markzegarelli
state: COMMENTED
author_association: MEMBER
submitted_at: 2025-04-25T21:25:30Z
user: login: markzegarelli
state: APPROVED
author_association: MEMBER
submitted_at: 2025-04-28T21:16:28Z

Review comments:
diff_hunk: @@ -100,9 +100,21 @@ If your organization has purchased the [Accounts add-on](/docs/analytics/account
 
 Groups must be included in the user sent with the fetch request (recommended), or identified with the user via a group identify call from the [Group Identify API](/docs/apis/analytics/group-identify) or with [`setGroup()` from an analytics SDK](/docs/sdks/analytics/browser/browser-sdk-2#user-groups).
 
-Supported Experiment SDKs:
-
-* [JavaScript](/docs/sdks/experiment-sdks/experiment-javascript#fetch)
+This is supported on all Experiment SDKs. The minimum versions are:
+
+client-side:
path: content/collections/experiment/en/data-model.md
user: login: tyiuhc
body: We should probably use a table for this, instead of using plain text
created_at: 2025-04-25T18:45:51Z
author_association: CONTRIBUTOR
diff_hunk: @@ -100,9 +100,21 @@ If your organization has purchased the [Accounts add-on](/docs/analytics/account
 
 Groups must be included in the user sent with the fetch request (recommended), or identified with the user via a group identify call from the [Group Identify API](/docs/apis/analytics/group-identify) or with [`setGroup()` from an analytics SDK](/docs/sdks/analytics/browser/browser-sdk-2#user-groups).
 
-Supported Experiment SDKs:
-
-* [JavaScript](/docs/sdks/experiment-sdks/experiment-javascript#fetch)
+This is supported on all Experiment SDKs. The minimum versions are:
+
+client-side:
path: content/collections/experiment/en/data-model.md
user: login: markzegarelli
body: Agree, I'll reformat it.
created_at: 2025-04-25T21:25:30Z
author_association: MEMBER

PR comments:
user: login: vercel[bot]
created_at: 2025-04-25T17:39:10Z
body: [vc]: #nLNkWg/cVyE5hpb6PuWjJmh4To+56XzIeni5Kyf9ME4=:eyJpc01vbm9yZXBvIjp0cnVlLCJ0eXBlIjoiZ2l0aHViIiwicHJvamVjdHMiOlt7Im5hbWUiOiJhbXBsaXR1ZGUtZG9jcyIsImluc3BlY3RvclVybCI6Imh0dHBzOi8vdmVyY2VsLmNvbS9hbXBsaXR1ZGUtaW5jL2FtcGxpdHVkZS1kb2NzL2I3dnJpZDh5S2pGVUpXSmttTjlURmc3OVlSbXgiLCJwcmV2aWV3VXJsIjoiYW1wbGl0dWRlLWRvY3MtZ2l0LWFraGlsLXByYWthc2gtcGF0Y2gtNjItYW1wbGl0dWRlLWluYy52ZXJjZWwuYXBwIiwibmV4dENvbW1pdFN0YXR1cyI6IkRFUExPWUVEIiwicm9vdERpcmVjdG9yeSI6bnVsbH1dfQ==
**The latest updates on your projects**. Learn more about [Vercel for Git ↗︎](https://vercel.link/github-learn-more)

| Name | Status | Preview | Updated (UTC) |
| :--- | :----- | :------ | :------ |
| **amplitude-docs** | ✅ Ready ([Inspect](https://vercel.com/amplitude-inc/amplitude-docs/b7vrid8yKjFUJWJkmN9TFg79YRmx)) | [Visit Preview](https://amplitude-docs-git-akhil-prakash-patch-62-amplitude-inc.vercel.app) | Apr 28, 2025 8:27pm |


author_association: NONE
user: login: markzegarelli
created_at: 2025-04-25T21:24:34Z
body: > @markzegarelli
> 
> 1. We support account level bucketing at analysis for all the Experiment SDKs. Do I just copy paste what is in the JavaScript docs to all the other languages and change the syntax to match the language? This is what is in the Javascript docs https://amplitude.com/docs/sdks/experiment-sdks/experiment-javascript#user-provider
> 2. Should we add something here about supporting accounts add on in Experiment and Experiment Results even though it is in Beta? https://amplitude.com/docs/analytics/account-level-reporting
> 3. https://amplitude.com/docs/analytics/account-level-reporting-setup This article seems to suggest that accounts add on is only supported on Android, iOS, and JavaScript. But groups exists in the Go SDK https://amplitude.com/docs/sdks/analytics/go/go-sdk and the Python SDK https://amplitude.com/docs/sdks/analytics-sdks/python/python-sdk for example. Should that list get updated with all the SDKs? Looks like all the SDKs support groups except for Unreal https://amplitude.com/docs/sdks/analytics/unreal/unreal-sdk but I would double check with someone on the SDK team.

Thanks @akhil-prakash!

1. Yes please copy the verbiage and update syntax.
2. If the it's a public beta, or there's a way for people to opt in, let's add it to the docs and call out that it's Beta.
3. Yes, I'll take this and update in a separate PR.

author_association: MEMBER
user: login: akhil-prakash
created_at: 2025-04-25T21:41:47Z
body: > > @markzegarelli
> > 
> > 1. We support account level bucketing at analysis for all the Experiment SDKs. Do I just copy paste what is in the JavaScript docs to all the other languages and change the syntax to match the language? This is what is in the Javascript docs https://amplitude.com/docs/sdks/experiment-sdks/experiment-javascript#user-provider
> > 2. Should we add something here about supporting accounts add on in Experiment and Experiment Results even though it is in Beta? https://amplitude.com/docs/analytics/account-level-reporting
> > 3. https://amplitude.com/docs/analytics/account-level-reporting-setup This article seems to suggest that accounts add on is only supported on Android, iOS, and JavaScript. But groups exists in the Go SDK https://amplitude.com/docs/sdks/analytics/go/go-sdk and the Python SDK https://amplitude.com/docs/sdks/analytics-sdks/python/python-sdk for example. Should that list get updated with all the SDKs? Looks like all the SDKs support groups except for Unreal https://amplitude.com/docs/sdks/analytics/unreal/unreal-sdk but I would double check with someone on the SDK team.
> 
> Thanks @akhil-prakash!
> 
> 1. Yes please copy the verbiage and update syntax.
> 2. If the it's a public beta, or there's a way for people to opt in, let's add it to the docs and call out that it's Beta.
> 3. Yes, I'll take this and update in a separate PR.

Sounds good.

1. I can do this
2. People have to buy accounts add on and then tell us they want it turned on and we turn on this feature flag for them https://app.amplitude.com/experiment/amplitude/318008/config/9491/configure
3. thanks for doing this
author_association: CONTRIBUTOR