Skip to main content
POST
/
api
/
v1
/
analytics
/
shopping
/
products
List products with shopping metrics
curl --request POST \
  --url https://api.mentionlab.io/api/v1/analytics/shopping/products \
  --header 'Content-Type: application/json' \
  --header 'x-project-id: <x-project-id>' \
  --data '
{
  "startDate": "2025-01-01",
  "endDate": "2025-02-01",
  "countries": [
    "BE",
    "FR"
  ],
  "languages": [
    "en",
    "fr"
  ],
  "models": [
    "gpt-4o",
    "claude-3-5-sonnet"
  ],
  "queryIds": [
    "3fa85f64-5717-4562-b3fc-2c963f66afa6"
  ],
  "queryTagIds": [
    "3fa85f64-5717-4562-b3fc-2c963f66afa6"
  ],
  "execTagIds": [
    "3fa85f64-5717-4562-b3fc-2c963f66afa6"
  ],
  "queryTagMode": "or",
  "execTagMode": "or",
  "timezone": "Europe/Brussels",
  "groupByEntityGroup": true,
  "entityTypes": [
    "owned",
    "primary",
    "competitor"
  ],
  "entityIds": [
    "8d3c2f1a-1b2c-4d5e-9f01-23456789abcd"
  ],
  "page": 1,
  "pageSize": 50,
  "productName": "wireless headphones",
  "sort": [
    {
      "field": "visibility",
      "direction": "DESC"
    }
  ]
}
'
{
  "totalShoppingResponses": 150,
  "products": [
    {
      "productId": "550e8400-e29b-41d4-a716-446655440000",
      "productName": "iPhone 16 Pro",
      "brandEntityId": "550e8400-e29b-41d4-a716-446655440001",
      "brandName": "Apple",
      "isOwned": true,
      "isPrimary": true,
      "isCompetitor": true,
      "visibility": 34,
      "merchants": [
        {
          "name": "Amazon",
          "domain": "amazon.com"
        }
      ],
      "avgPrice": 999,
      "avgRating": 4.5,
      "mentionCount": 42,
      "imageUrl": "https://example.com/img/product-123.jpg"
    }
  ],
  "page": {
    "totalRecords": 123,
    "limit": 123,
    "currentPage": 123,
    "totalPages": 123,
    "nextPage": 123,
    "prevPage": 123
  }
}

Headers

x-project-id
string
required

Project ID to specify the project context

Body

application/json
startDate
string

Start date (inclusive)

Example:

"2025-01-01"

endDate
string

End date (exclusive)

Example:

"2025-02-01"

countries
string[]

Filter by country codes

Example:
["BE", "FR"]
languages
string[]

Filter by language codes

Example:
["en", "fr"]
models
string[]

Filter by AI models

Example:
["gpt-4o", "claude-3-5-sonnet"]
queryIds
string[]

Filter by query IDs

Example:
["3fa85f64-5717-4562-b3fc-2c963f66afa6"]
hasSources
enum<string>

Filter by source presence: "sources" (only with sources), "no_sources" (only without), "all" (no filter). Legacy true/false values are still accepted.

Available options:
all,
sources,
no_sources
hasShopping
enum<string>

Filter by shopping presence: "shopping" (only with shopping), "no_shopping" (only without), "all" (no filter). Legacy true/false values are still accepted.

Available options:
all,
shopping,
no_shopping
queryTagIds
string[]

Filter by query tag IDs

Example:
["3fa85f64-5717-4562-b3fc-2c963f66afa6"]
execTagIds
string[]

Filter by execution tag IDs

Example:
["3fa85f64-5717-4562-b3fc-2c963f66afa6"]
queryTagMode
enum<string>
default:or

Query tag matching mode: "or" matches ANY tag (default), "and" matches ALL tags.

Available options:
and,
or
execTagMode
enum<string>
default:or

Execution tag matching mode: "or" matches ANY tag (default), "and" matches ALL tags.

Available options:
and,
or
timezone
string
default:UTC

IANA timezone for date bucketing and filtering (e.g. "Europe/Brussels"). Defaults to UTC.

Example:

"Europe/Brussels"

groupByEntityGroup
boolean
default:false

When true, entities in the same group are collapsed into one row, counted once per response (so visibility cannot exceed 100%).

Example:

true

entityTypes
enum<string>[]

Filter which entity types to include in results. Accepted values: "owned", "primary", "competitor". Defaults to all types when omitted.

Available options:
owned,
primary,
competitor
Example:
["owned", "primary", "competitor"]
entityIds
string[]

Entity IDs to filter products by brand (defaults to all non-blacklisted).

Example:
["8d3c2f1a-1b2c-4d5e-9f01-23456789abcd"]
page
number
default:1

Page number (1-based).

Example:

1

pageSize
number
default:50

Items per page (max 200).

Example:

50

productName
string

Case-insensitive substring match on product name.

Example:

"wireless headphones"

sort
object[]

Sort order. Allowed fields: productName, brandName, visibility, avgPrice, avgRating, mentionCount.

Example:
[
{
"field": "visibility",
"direction": "DESC"
}
]

Response

totalShoppingResponses
number
required

Total distinct AI responses with shopping products (denominator for visibility).

Example:

150

products
object[]
required

All products, sorted and paginated.

page
object
required

Pagination metadata.