> ## Documentation Index
> Fetch the complete documentation index at: https://docs.iqrush.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# Read AI-referred product performance — HTTP

> Read product activity and revenue represented in the AI referral data.

Read product activity and revenue represented in the AI referral data.

**Method:** `GET`

**Path:** `/projects/{project_id}/ga4/ecommerce/products`

Use the HTTP base for your authorized environment and an `Authorization: Bearer` header. See [authentication](/developers/guides/04-authentication) and [HTTP setup](/developers/guides/06-http-quickstart).

## Parameters

This table covers the standard read profile. It excludes internal application routes and advanced analysis controls.

| Name | Location | Type | Required | Default | Meaning |
| - | - | - | - | - | - |
| `project_id` | path | string | Yes | — | Project ID from list\_projects. Select the project in the intended workspace and environment. |
| `start_date` | query | string | No | `"30daysAgo"` | Start of the requested range, as YYYY-MM-DD or a relative value such as 30daysAgo. These reads select a stored snapshot; use resolved\_window for the dates actually served. |
| `end_date` | query | string | No | `"today"` | End of the requested range, as YYYY-MM-DD or today. Check resolved\_window rather than treating the requested dates as the served period. |
| `session_source` | query | string | No | `null` | Restrict rows to one AI referral source, such as a source returned by get\_ai\_traffic\_sources. Omit to leave source unrestricted. |
| `limit` | query | integer | No | `50` | Maximum product rows returned, ordered by item revenue. This selects a list, not a separate reporting period. |

## Request example

Set `IQRUSH_API_BASE` and `IQRUSH_ACCESS_TOKEN` through secure configuration. Replace project/run IDs and sample selections with values returned by your account. JSON objects and arrays are encoded as query strings.

```bash theme={null}
curl --fail-with-body --silent --show-error --get \
  --header "Authorization: Bearer ${IQRUSH_ACCESS_TOKEN}" \
  --header "Accept: application/json" \
  --data-urlencode start_date=2026-09-01 \
  --data-urlencode end_date=2026-09-30 \
  --data-urlencode limit=20 \
  "${IQRUSH_API_BASE%/}/projects/${IQRUSH_PROJECT_ID}/ga4/ecommerce/products"
```

## Read the response

Returns product-level results and available period information. Inspect link, unavailable, and resolved-window fields before interpreting rows.

Keep the product identifiers and reporting period with the result. The data does not by itself measure PDP citation coverage; use URL citation scores for that.

### Fields to use

These selected fields explain the example and the result to preserve. Field presence depends on the response; this is not a complete response schema.

| Field | Meaning and use |
| - | - |
| `linked` | Whether a property link exists for this project. |
| `products` | Product results when available. No product rows were invented for this unlinked example. |

Selected response fields from IQRush Dev. Lists are shortened and project/run IDs are placeholders; this is not the full response.

```json theme={null}
{
  "project_id": "PROJECT_ID",
  "linked": false,
  "products": []
}
```

This observed example has no linked Google property. It demonstrates the unavailable-integration response; it is not a zero-traffic report.

MCP equivalent: [`get_product_performance`](/developers/tools/get_product_performance). Use the parameters and defaults on this page for HTTP.

### Fields when linked data is available

The Dev handler defines the fields below for populated responses. They are not populated in the unlinked example shown here.

| Field | Meaning and use |
| - | - |
| `resolved_window` | Stored snapshot dates actually served; retain these dates with the report. |
| `products[].item_name` | Product name in the stored ecommerce data. |
| `products[].item_brand` | Product brand recorded by the linked property. |
| `products[].items_viewed` | Item-view count in the selected scope. |
| `products[].items_added_to_cart` | Items added to cart in the selected scope. |
| `products[].items_checked_out` | Items reaching checkout in the selected scope. |
| `products[].items_purchased` | Purchased-item count; it is not automatically a count of distinct purchasers. |
| `products[].item_revenue` | Stored item revenue. Do not invent a currency when none is supplied. |
| `products[].conversion_rate` | Purchased items divided by viewed items, or null when no views are recorded; not a session conversion rate. |

## If the result is unavailable

Check HTTP status and the response’s `error` field before using data. A successful empty response does not establish a zero value. Preserve `not_available`, `not_available_reason`, `unavailable_reason`, and `linked` where returned. [Errors and recovery](/developers/guides/13-errors) shows observed examples.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.