Trendtrack
Trendtrack
DashboardGet API keyIntroduction
API Reference
Ads
Advertisers
Brandtrackers
Discovery
Emails
Facets
Favorites
Identity
Shops
List shopsQuery shopsList shops similar to a domain or shop idGet a shop by idList advertisers linked to a shopGet shop social follower historyList shop products
System
Usage
Workspace
ReferenceAPI

Shops

List shops

Returns the lightweight public shops browse surface. This endpoint stays intentionally simple and covers the default discovery path through search, pagination, sorting, and a small stable subset of filters. For the full advanced filtering contract, use POST /v1/shops/query.

Authorization

publicApiBearer
AuthorizationBearer <token>

Provide a Trendtrack Public API key using Authorization: Bearer <api_key>.

In: header

Query Parameters

search?string

Optional broad shop identity search term matched against domain, related domains, and shop name. This GET browse search remains broad; use POST /v1/shops/query with searchType="domain" for exact domain matching.

sortBy?string

Optional sort key for the shops list. Defaults to monthlyVisits.

Value in"monthlyVisits" | "activeAds" | "growth30d" | "productsCount" | "createdAt"
order?string

Optional sort order. Defaults to desc.

Value in"asc" | "desc"
offset?integer

Pagination offset. Defaults to 0.

Default0
Range0 <= value
limit?integer

Maximum number of shops to return. Defaults to 32.

Default32
Range1 <= value <= 100
minMonthlyVisits?integer

Optional minimum monthly visits filter.

Range0 <= value
maxMonthlyVisits?integer

Optional maximum monthly visits filter.

Range0 <= value
minActiveAds?number

Optional minimum active ads filter. The metric follows adsTimePeriod.

Range0 <= value
maxActiveAds?number

Optional maximum active ads filter. The metric follows adsTimePeriod.

Range0 <= value
adsTimePeriod?string

Optional time period used by active ads filters and sorting. Defaults to last24h.

Value in"last24h" | "last7d" | "last30d"
minProductsCount?integer

Optional minimum products count filter.

Range0 <= value
maxProductsCount?integer

Optional maximum products count filter.

Range0 <= value
createdAfter?string

Optional inclusive lower bound for shop creation date.

Formatdate
createdBefore?string

Optional inclusive upper bound for shop creation date.

Formatdate
isShopifyPlus?boolean

Optional Shopify Plus filter.

categoryIds?array<integer>

Optional category ids. Uses the same index field as POST /v1/shops/query categoryIds.

pixelIds?array<string>

Optional stable pixel/technology ids. Uses the same index field as POST /v1/shops/query pixelIds.

excludePixelIds?array<string>

Optional stable pixel/technology ids to exclude. Uses the same index field as POST /v1/shops/query excludePixelIds.

shopifyAppIds?array<integer>

Optional Shopify app identifiers. Uses the same index field as POST /v1/shops/query shopifyAppIds.

excludeShopifyAppIds?array<integer>

Optional Shopify app identifiers to exclude. Uses the same index field as POST /v1/shops/query excludeShopifyAppIds.

languages?array<string>

Optional default language filters. Accepts repeated query params or a comma-separated list.

currencies?array<string>

Optional default currency filters. Accepts repeated query params or a comma-separated list.

minTrustpilotRating?number

Optional minimum Trustpilot rating filter.

Range0 <= value
maxTrustpilotRating?number

Optional maximum Trustpilot rating filter.

Range0 <= value
minTrustpilotReviewCount?integer

Optional minimum Trustpilot reviews filter.

Range0 <= value
maxTrustpilotReviewCount?integer

Optional maximum Trustpilot reviews filter.

Range0 <= value

Response Body

application/json

application/json

application/json

application/json

application/json

curl -X GET "https://api.trendtrack.io/v1/shops"
{
  "requestId": "5d93d8de-0f6d-46a4-bd10-2e519b7e96bc",
  "data": [
    {
      "id": "3f8aa146-6f96-46e8-9781-64db5166f9a8",
      "domain": "example.com",
      "name": "Example Shop",
      "screenshotUrl": "https://cdn.example.com/screenshots/example.com.png",
      "createdAt": "2024-01-15T00:00:00.000Z",
      "profile": {
        "countryCode": "US",
        "currency": "USD",
        "isShopifyPlus": true
      },
      "catalog": {
        "productsCount": 124,
        "mainCategory": "Fashion",
        "bestSellers": [
          {
            "imageUrl": "https://cdn.shopify.com/s/files/1/1442/3288/files/PDP_QUIET_WHITE_01-805740.png",
            "title": "Loop Quiet™ 2",
            "price": 19.95,
            "currency": "EUR"
          }
        ]
      },
      "traffic": {
        "monthlyVisits": 45231,
        "growth30d": 0.18,
        "history": [
          {
            "period": "2026-03-01",
            "value": 2942350
          }
        ],
        "topCountries": [
          {
            "countryCode": "US",
            "share": 0.64
          }
        ]
      },
      "advertising": {
        "activeAds": 12,
        "linkedAdvertisersCount": 2,
        "history": [
          {
            "period": "2026-03-01",
            "value": 2942350
          }
        ],
        "topCountries": [
          {
            "countryCode": "US",
            "share": 0.64
          }
        ]
      },
      "latestAds": [
        {
          "id": "facebook_1059447873925448",
          "mediaType": "video",
          "mediaUrl": "https://medias.trendtrack.io/video/facebook/1317841346869775.mp4",
          "thumbnailUrl": "https://medias.trendtrack.io/thumbnails/facebook/1317841346869775.jpg"
        }
      ]
    }
  ],
  "pagination": {
    "limit": 32,
    "offset": 0,
    "total": 128
  }
}
{
  "error": {
    "code": "missing_api_key",
    "message": "Provide an API key using Authorization: Bearer <api_key>.",
    "requestId": "5d93d8de-0f6d-46a4-bd10-2e519b7e96bc",
    "details": {
      "validationErrors": [
        {
          "field": "query-string.limit",
          "location": "query-string",
          "expected": [
            "limit must not be greater than 100"
          ]
        }
      ]
    }
  }
}
{
  "error": {
    "code": "missing_api_key",
    "message": "Provide an API key using Authorization: Bearer <api_key>.",
    "requestId": "5d93d8de-0f6d-46a4-bd10-2e519b7e96bc",
    "details": {
      "validationErrors": [
        {
          "field": "query-string.limit",
          "location": "query-string",
          "expected": [
            "limit must not be greater than 100"
          ]
        }
      ]
    }
  }
}
{
  "error": {
    "code": "missing_api_key",
    "message": "Provide an API key using Authorization: Bearer <api_key>.",
    "requestId": "5d93d8de-0f6d-46a4-bd10-2e519b7e96bc",
    "details": {
      "validationErrors": [
        {
          "field": "query-string.limit",
          "location": "query-string",
          "expected": [
            "limit must not be greater than 100"
          ]
        }
      ]
    }
  }
}
{
  "error": {
    "code": "missing_api_key",
    "message": "Provide an API key using Authorization: Bearer <api_key>.",
    "requestId": "5d93d8de-0f6d-46a4-bd10-2e519b7e96bc",
    "details": {
      "validationErrors": [
        {
          "field": "query-string.limit",
          "location": "query-string",
          "expected": [
            "limit must not be greater than 100"
          ]
        }
      ]
    }
  }
}

Query shops

Returns the advanced public shops discovery surface. This endpoint is the canonical public route for complex filtering and sorting, while keeping the response aligned with the standard public ShopSummary contract. searchType=domain performs exact domain/related-domain matching from a domain or URL and does not fall back to broad wildcard/text matching.

Authorization

publicApiBearer
AuthorizationBearer <token>

Provide a Trendtrack Public API key using Authorization: Bearer <api_key>.

In: header

Request Body

application/json

TypeScript Definitions

Use the request body type in TypeScript.

Response Body

application/json

application/json

application/json

application/json

application/json

curl -X POST "https://api.trendtrack.io/v1/shops/query" \  -H "Content-Type: application/json" \  -d '{    "search": "https://www.allbirds.com/products",    "searchType": "domain",    "limit": 10,    "offset": 0  }'
{
  "requestId": "5d93d8de-0f6d-46a4-bd10-2e519b7e96bc",
  "data": [
    {
      "id": "3f8aa146-6f96-46e8-9781-64db5166f9a8",
      "domain": "example.com",
      "name": "Example Shop",
      "screenshotUrl": "https://cdn.example.com/screenshots/example.com.png",
      "createdAt": "2024-01-15T00:00:00.000Z",
      "profile": {
        "countryCode": "US",
        "currency": "USD",
        "isShopifyPlus": true
      },
      "catalog": {
        "productsCount": 124,
        "mainCategory": "Fashion",
        "bestSellers": [
          {
            "imageUrl": "https://cdn.shopify.com/s/files/1/1442/3288/files/PDP_QUIET_WHITE_01-805740.png",
            "title": "Loop Quiet™ 2",
            "price": 19.95,
            "currency": "EUR"
          }
        ]
      },
      "traffic": {
        "monthlyVisits": 45231,
        "growth30d": 0.18,
        "history": [
          {
            "period": "2026-03-01",
            "value": 2942350
          }
        ],
        "topCountries": [
          {
            "countryCode": "US",
            "share": 0.64
          }
        ]
      },
      "advertising": {
        "activeAds": 12,
        "linkedAdvertisersCount": 2,
        "history": [
          {
            "period": "2026-03-01",
            "value": 2942350
          }
        ],
        "topCountries": [
          {
            "countryCode": "US",
            "share": 0.64
          }
        ]
      },
      "latestAds": [
        {
          "id": "facebook_1059447873925448",
          "mediaType": "video",
          "mediaUrl": "https://medias.trendtrack.io/video/facebook/1317841346869775.mp4",
          "thumbnailUrl": "https://medias.trendtrack.io/thumbnails/facebook/1317841346869775.jpg"
        }
      ]
    }
  ],
  "pagination": {
    "limit": 32,
    "offset": 0,
    "total": 128
  }
}
{
  "error": {
    "code": "missing_api_key",
    "message": "Provide an API key using Authorization: Bearer <api_key>.",
    "requestId": "5d93d8de-0f6d-46a4-bd10-2e519b7e96bc",
    "details": {
      "validationErrors": [
        {
          "field": "query-string.limit",
          "location": "query-string",
          "expected": [
            "limit must not be greater than 100"
          ]
        }
      ]
    }
  }
}
{
  "error": {
    "code": "missing_api_key",
    "message": "Provide an API key using Authorization: Bearer <api_key>.",
    "requestId": "5d93d8de-0f6d-46a4-bd10-2e519b7e96bc",
    "details": {
      "validationErrors": [
        {
          "field": "query-string.limit",
          "location": "query-string",
          "expected": [
            "limit must not be greater than 100"
          ]
        }
      ]
    }
  }
}
{
  "error": {
    "code": "missing_api_key",
    "message": "Provide an API key using Authorization: Bearer <api_key>.",
    "requestId": "5d93d8de-0f6d-46a4-bd10-2e519b7e96bc",
    "details": {
      "validationErrors": [
        {
          "field": "query-string.limit",
          "location": "query-string",
          "expected": [
            "limit must not be greater than 100"
          ]
        }
      ]
    }
  }
}
{
  "error": {
    "code": "missing_api_key",
    "message": "Provide an API key using Authorization: Bearer <api_key>.",
    "requestId": "5d93d8de-0f6d-46a4-bd10-2e519b7e96bc",
    "details": {
      "validationErrors": [
        {
          "field": "query-string.limit",
          "location": "query-string",
          "expected": [
            "limit must not be greater than 100"
          ]
        }
      ]
    }
  }
}

List shops similar to a domain or shop id

Returns a paginated list of similar shops using the public hybrid shops contract. The identifier can be a canonical domain or a public shop id / website UUID. When the resolved shop is not present in the similar shops engine, the endpoint still returns 200 with an empty data array and meta.shopExists=false.

Authorization

publicApiBearer
AuthorizationBearer <token>

Provide a Trendtrack Public API key using Authorization: Bearer <api_key>.

In: header

Path Parameters

identifier*string

Canonical shop domain or stable public shop id / website UUID used to resolve similar shops.

Query Parameters

sortBy?string

Sort key for similar shops. createdAt uses request-time normalization while the backing creation_date field remains keyword-mapped; native date sorting requires an Elasticsearch mapping/reindex update.

Value in"relevance" | "monthlyVisits" | "activeAds" | "growth30d" | "productsCount" | "createdAt"
order?string

Optional sort order. Defaults to desc.

Value in"asc" | "desc"
offset?integer

Pagination offset. Defaults to 0.

Default0
Range0 <= value
limit?integer

Maximum number of similar shops to return. Defaults to 32.

Default32
Range1 <= value <= 100

Response Body

application/json

application/json

application/json

application/json

application/json

application/json

curl -X GET "https://api.trendtrack.io/v1/shops/example.com/similar"
{
  "requestId": "5d93d8de-0f6d-46a4-bd10-2e519b7e96bc",
  "data": [
    {
      "shop": {
        "id": "3f8aa146-6f96-46e8-9781-64db5166f9a8",
        "domain": "example.com",
        "name": "Example Shop",
        "screenshotUrl": "https://cdn.example.com/screenshots/example.com.png",
        "createdAt": "2024-01-15T00:00:00.000Z",
        "profile": {
          "countryCode": "US",
          "currency": "USD",
          "isShopifyPlus": true
        },
        "catalog": {
          "productsCount": 124,
          "mainCategory": "Fashion",
          "bestSellers": [
            {
              "imageUrl": "https://cdn.shopify.com/s/files/1/1442/3288/files/PDP_QUIET_WHITE_01-805740.png",
              "title": "Loop Quiet™ 2",
              "price": 19.95,
              "currency": "EUR"
            }
          ]
        },
        "traffic": {
          "monthlyVisits": 45231,
          "growth30d": 0.18,
          "history": [
            {
              "period": "2026-03-01",
              "value": 2942350
            }
          ],
          "topCountries": [
            {
              "countryCode": "US",
              "share": 0.64
            }
          ]
        },
        "advertising": {
          "activeAds": 12,
          "linkedAdvertisersCount": 2,
          "history": [
            {
              "period": "2026-03-01",
              "value": 2942350
            }
          ],
          "topCountries": [
            {
              "countryCode": "US",
              "share": 0.64
            }
          ]
        },
        "latestAds": [
          {
            "id": "facebook_1059447873925448",
            "mediaType": "video",
            "mediaUrl": "https://medias.trendtrack.io/video/facebook/1317841346869775.mp4",
            "thumbnailUrl": "https://medias.trendtrack.io/thumbnails/facebook/1317841346869775.jpg"
          }
        ]
      },
      "similarityScore": 0.9137
    }
  ],
  "pagination": {
    "limit": 32,
    "offset": 0,
    "total": 128
  },
  "meta": {
    "shopExists": true
  }
}
{
  "error": {
    "code": "missing_api_key",
    "message": "Provide an API key using Authorization: Bearer <api_key>.",
    "requestId": "5d93d8de-0f6d-46a4-bd10-2e519b7e96bc",
    "details": {
      "validationErrors": [
        {
          "field": "query-string.limit",
          "location": "query-string",
          "expected": [
            "limit must not be greater than 100"
          ]
        }
      ]
    }
  }
}
{
  "error": {
    "code": "missing_api_key",
    "message": "Provide an API key using Authorization: Bearer <api_key>.",
    "requestId": "5d93d8de-0f6d-46a4-bd10-2e519b7e96bc",
    "details": {
      "validationErrors": [
        {
          "field": "query-string.limit",
          "location": "query-string",
          "expected": [
            "limit must not be greater than 100"
          ]
        }
      ]
    }
  }
}
{
  "error": {
    "code": "missing_api_key",
    "message": "Provide an API key using Authorization: Bearer <api_key>.",
    "requestId": "5d93d8de-0f6d-46a4-bd10-2e519b7e96bc",
    "details": {
      "validationErrors": [
        {
          "field": "query-string.limit",
          "location": "query-string",
          "expected": [
            "limit must not be greater than 100"
          ]
        }
      ]
    }
  }
}
{
  "error": {
    "code": "missing_api_key",
    "message": "Provide an API key using Authorization: Bearer <api_key>.",
    "requestId": "5d93d8de-0f6d-46a4-bd10-2e519b7e96bc",
    "details": {
      "validationErrors": [
        {
          "field": "query-string.limit",
          "location": "query-string",
          "expected": [
            "limit must not be greater than 100"
          ]
        }
      ]
    }
  }
}
{
  "error": {
    "code": "missing_api_key",
    "message": "Provide an API key using Authorization: Bearer <api_key>.",
    "requestId": "5d93d8de-0f6d-46a4-bd10-2e519b7e96bc",
    "details": {
      "validationErrors": [
        {
          "field": "query-string.limit",
          "location": "query-string",
          "expected": [
            "limit must not be greater than 100"
          ]
        }
      ]
    }
  }
}

Get a shop by id

Returns the public hybrid shop detail read model for a single shop identifier.

Authorization

publicApiBearer
AuthorizationBearer <token>

Provide a Trendtrack Public API key using Authorization: Bearer <api_key>.

In: header

Path Parameters

shopId*string

Stable public shop identifier.

Response Body

application/json

application/json

application/json

application/json

application/json

application/json

application/json

curl -X GET "https://api.trendtrack.io/v1/shops/3f8aa146-6f96-46e8-9781-64db5166f9a8"
{
  "requestId": "5d93d8de-0f6d-46a4-bd10-2e519b7e96bc",
  "data": {
    "id": "3f8aa146-6f96-46e8-9781-64db5166f9a8",
    "domain": "example.com",
    "name": "Example Shop",
    "screenshotUrl": "https://cdn.example.com/screenshots/example.com.png",
    "createdAt": "2024-01-15T00:00:00.000Z",
    "profile": {
      "countryCode": "US",
      "currency": "USD",
      "isShopifyPlus": true,
      "defaultLanguage": "en"
    },
    "trustpilot": {
      "rating": 4.7,
      "reviewCount": 1834,
      "brandName": "Loop Earplugs",
      "brandLogo": "https://s3-eu-west-1.amazonaws.com/tpd/logos/...png",
      "url": "https://www.trustpilot.com/review/loopearplugs.com"
    },
    "socials": {
      "facebook": {
        "handle": "loopearplugs",
        "followers": 12843,
        "growth30d": 0.042
      },
      "instagram": {
        "handle": "loopearplugs",
        "followers": 12843,
        "growth30d": 0.042
      },
      "tiktok": {
        "handle": "loopearplugs",
        "followers": 12843,
        "growth30d": 0.042
      },
      "youtube": {
        "handle": "loopearplugs",
        "followers": 12843,
        "growth30d": 0.042
      },
      "pinterest": {
        "handle": "loopearplugs",
        "followers": 12843,
        "growth30d": 0.042
      },
      "linkedin": {
        "handle": "loopearplugs",
        "followers": 12843,
        "growth30d": 0.042
      },
      "twitter": {
        "handle": "loopearplugs",
        "followers": 12843,
        "growth30d": 0.042
      }
    },
    "catalog": {
      "productsCount": 124,
      "mainCategory": "Fashion",
      "bestSellers": [
        {
          "imageUrl": "https://cdn.shopify.com/s/files/1/1442/3288/files/PDP_QUIET_WHITE_01-805740.png",
          "title": "Loop Quiet™ 2",
          "price": 19.95,
          "currency": "EUR"
        }
      ],
      "categories": [
        "Fashion",
        "Accessories"
      ],
      "myShopifyDomain": "loopearplugs.myshopify.com"
    },
    "traffic": {
      "monthlyVisits": 45231,
      "growth30d": 0.18,
      "history": [
        {
          "period": "2026-03-01",
          "value": 2942350
        }
      ],
      "topCountries": [
        {
          "countryCode": "US",
          "share": 0.64
        }
      ],
      "growth90d": 0.32,
      "growth180d": 0.41,
      "mainMarkets": [
        {
          "countryCode": "US",
          "share": 0.64
        }
      ]
    },
    "advertising": {
      "activeAds": 12,
      "linkedAdvertisersCount": 2,
      "history": [
        {
          "period": "2026-03-01",
          "value": 2942350
        }
      ],
      "topCountries": [
        {
          "countryCode": "US",
          "share": 0.64
        }
      ],
      "linkedAdvertisers": [
        {
          "id": "1234567890",
          "platform": "facebook",
          "facebookPageId": "1234567890",
          "name": "Acme Brand",
          "isPrimary": true,
          "activeAds": 12
        }
      ],
      "summary": {
        "activeAds": 12,
        "avgActiveAds30d": 9.4,
        "reach30d": 102300,
        "countryDistribution": [
          {
            "countryCode": "US",
            "share": 0.64
          }
        ]
      },
      "adsCountryStats": [
        {
          "countryCode": "US",
          "share": 0.64
        }
      ]
    },
    "technology": {
      "theme": "Prestige",
      "apps": [
        {
          "id": "41c143a7-0000-4000-8000-000000000000",
          "label": "Judge.me",
          "iconUrl": "https://cdn.shopify.com/app-store/listing_images/abc/icon.png"
        }
      ],
      "pixels": [
        {
          "id": "002d1031-2a33-42c6-9b4a-c5db2349ecec",
          "name": "Meta Pixel",
          "iconUrl": "https://trendtrack.r2.cloudflarestorage.com/technology_icons/MetaPixel.png?...signature",
          "categories": [
            "Analytics",
            "Advertising"
          ]
        }
      ]
    },
    "latestAds": [
      {
        "id": "facebook_1059447873925448",
        "mediaType": "video",
        "mediaUrl": "https://medias.trendtrack.io/video/facebook/1317841346869775.mp4",
        "thumbnailUrl": "https://medias.trendtrack.io/thumbnails/facebook/1317841346869775.jpg"
      }
    ],
    "similarShops": [
      {
        "shop": {
          "id": "3f8aa146-6f96-46e8-9781-64db5166f9a8",
          "domain": "example.com",
          "name": "Example Shop",
          "screenshotUrl": "https://cdn.example.com/screenshots/example.com.png",
          "createdAt": "2024-01-15T00:00:00.000Z",
          "profile": {
            "countryCode": "US",
            "currency": "USD",
            "isShopifyPlus": true
          },
          "catalog": {
            "productsCount": 124,
            "mainCategory": "Fashion",
            "bestSellers": [
              {
                "imageUrl": "https://cdn.shopify.com/s/files/1/1442/3288/files/PDP_QUIET_WHITE_01-805740.png",
                "title": "Loop Quiet™ 2",
                "price": 19.95,
                "currency": "EUR"
              }
            ]
          },
          "traffic": {
            "monthlyVisits": 45231,
            "growth30d": 0.18,
            "history": [
              {
                "period": "2026-03-01",
                "value": 2942350
              }
            ],
            "topCountries": [
              {
                "countryCode": "US",
                "share": 0.64
              }
            ]
          },
          "advertising": {
            "activeAds": 12,
            "linkedAdvertisersCount": 2,
            "history": [
              {
                "period": "2026-03-01",
                "value": 2942350
              }
            ],
            "topCountries": [
              {
                "countryCode": "US",
                "share": 0.64
              }
            ]
          },
          "latestAds": [
            {
              "id": "facebook_1059447873925448",
              "mediaType": "video",
              "mediaUrl": "https://medias.trendtrack.io/video/facebook/1317841346869775.mp4",
              "thumbnailUrl": "https://medias.trendtrack.io/thumbnails/facebook/1317841346869775.jpg"
            }
          ]
        },
        "similarityScore": 0.9137
      }
    ]
  }
}
{
  "error": {
    "code": "missing_api_key",
    "message": "Provide an API key using Authorization: Bearer <api_key>.",
    "requestId": "5d93d8de-0f6d-46a4-bd10-2e519b7e96bc",
    "details": {
      "validationErrors": [
        {
          "field": "query-string.limit",
          "location": "query-string",
          "expected": [
            "limit must not be greater than 100"
          ]
        }
      ]
    }
  }
}
{
  "error": {
    "code": "missing_api_key",
    "message": "Provide an API key using Authorization: Bearer <api_key>.",
    "requestId": "5d93d8de-0f6d-46a4-bd10-2e519b7e96bc",
    "details": {
      "validationErrors": [
        {
          "field": "query-string.limit",
          "location": "query-string",
          "expected": [
            "limit must not be greater than 100"
          ]
        }
      ]
    }
  }
}
{
  "error": {
    "code": "missing_api_key",
    "message": "Provide an API key using Authorization: Bearer <api_key>.",
    "requestId": "5d93d8de-0f6d-46a4-bd10-2e519b7e96bc",
    "details": {
      "validationErrors": [
        {
          "field": "query-string.limit",
          "location": "query-string",
          "expected": [
            "limit must not be greater than 100"
          ]
        }
      ]
    }
  }
}
{
  "error": {
    "code": "missing_api_key",
    "message": "Provide an API key using Authorization: Bearer <api_key>.",
    "requestId": "5d93d8de-0f6d-46a4-bd10-2e519b7e96bc",
    "details": {
      "validationErrors": [
        {
          "field": "query-string.limit",
          "location": "query-string",
          "expected": [
            "limit must not be greater than 100"
          ]
        }
      ]
    }
  }
}
{
  "error": {
    "code": "missing_api_key",
    "message": "Provide an API key using Authorization: Bearer <api_key>.",
    "requestId": "5d93d8de-0f6d-46a4-bd10-2e519b7e96bc",
    "details": {
      "validationErrors": [
        {
          "field": "query-string.limit",
          "location": "query-string",
          "expected": [
            "limit must not be greater than 100"
          ]
        }
      ]
    }
  }
}
{
  "error": {
    "code": "missing_api_key",
    "message": "Provide an API key using Authorization: Bearer <api_key>.",
    "requestId": "5d93d8de-0f6d-46a4-bd10-2e519b7e96bc",
    "details": {
      "validationErrors": [
        {
          "field": "query-string.limit",
          "location": "query-string",
          "expected": [
            "limit must not be greater than 100"
          ]
        }
      ]
    }
  }
}

List advertisers linked to a shop

Returns the linked advertiser summaries for a single shop identifier.

Authorization

publicApiBearer
AuthorizationBearer <token>

Provide a Trendtrack Public API key using Authorization: Bearer <api_key>.

In: header

Path Parameters

shopId*string

Stable public shop identifier.

Query Parameters

limit?integer
Default100
Range1 <= value <= 100

Response Body

application/json

application/json

application/json

application/json

application/json

application/json

application/json

curl -X GET "https://api.trendtrack.io/v1/shops/3f8aa146-6f96-46e8-9781-64db5166f9a8/advertisers"
{
  "requestId": "5d93d8de-0f6d-46a4-bd10-2e519b7e96bc",
  "data": [
    {
      "id": "1234567890",
      "platform": "facebook",
      "facebookPageId": "1234567890",
      "name": "Acme Brand",
      "isPrimary": true,
      "activeAds": 12
    }
  ]
}
{
  "error": {
    "code": "missing_api_key",
    "message": "Provide an API key using Authorization: Bearer <api_key>.",
    "requestId": "5d93d8de-0f6d-46a4-bd10-2e519b7e96bc",
    "details": {
      "validationErrors": [
        {
          "field": "query-string.limit",
          "location": "query-string",
          "expected": [
            "limit must not be greater than 100"
          ]
        }
      ]
    }
  }
}
{
  "error": {
    "code": "missing_api_key",
    "message": "Provide an API key using Authorization: Bearer <api_key>.",
    "requestId": "5d93d8de-0f6d-46a4-bd10-2e519b7e96bc",
    "details": {
      "validationErrors": [
        {
          "field": "query-string.limit",
          "location": "query-string",
          "expected": [
            "limit must not be greater than 100"
          ]
        }
      ]
    }
  }
}
{
  "error": {
    "code": "missing_api_key",
    "message": "Provide an API key using Authorization: Bearer <api_key>.",
    "requestId": "5d93d8de-0f6d-46a4-bd10-2e519b7e96bc",
    "details": {
      "validationErrors": [
        {
          "field": "query-string.limit",
          "location": "query-string",
          "expected": [
            "limit must not be greater than 100"
          ]
        }
      ]
    }
  }
}
{
  "error": {
    "code": "missing_api_key",
    "message": "Provide an API key using Authorization: Bearer <api_key>.",
    "requestId": "5d93d8de-0f6d-46a4-bd10-2e519b7e96bc",
    "details": {
      "validationErrors": [
        {
          "field": "query-string.limit",
          "location": "query-string",
          "expected": [
            "limit must not be greater than 100"
          ]
        }
      ]
    }
  }
}
{
  "error": {
    "code": "missing_api_key",
    "message": "Provide an API key using Authorization: Bearer <api_key>.",
    "requestId": "5d93d8de-0f6d-46a4-bd10-2e519b7e96bc",
    "details": {
      "validationErrors": [
        {
          "field": "query-string.limit",
          "location": "query-string",
          "expected": [
            "limit must not be greater than 100"
          ]
        }
      ]
    }
  }
}
{
  "error": {
    "code": "missing_api_key",
    "message": "Provide an API key using Authorization: Bearer <api_key>.",
    "requestId": "5d93d8de-0f6d-46a4-bd10-2e519b7e96bc",
    "details": {
      "validationErrors": [
        {
          "field": "query-string.limit",
          "location": "query-string",
          "expected": [
            "limit must not be greater than 100"
          ]
        }
      ]
    }
  }
}

Get shop social follower history

Returns follower time-series for Facebook and Instagram for the linked advertiser page of the shop. Other networks are handle-only today and not exposed here.

Authorization

publicApiBearer
AuthorizationBearer <token>

Provide a Trendtrack Public API key using Authorization: Bearer <api_key>.

In: header

Path Parameters

shopId*string

Stable public shop identifier.

Query Parameters

period?string

Aggregation bucket for the follower time series. Week and month pick the last raw snapshot of each bucket.

Value in"day" | "week" | "month"
days?integer

Rolling lookback window, in days, ending at the latest snapshot.

Default90
Range7 <= value <= 365

Response Body

application/json

application/json

application/json

application/json

application/json

application/json

application/json

curl -X GET "https://api.trendtrack.io/v1/shops/3f8aa146-6f96-46e8-9781-64db5166f9a8/socials/history"
{
  "requestId": "req_01JN3C9Q2K5X9Y6V7W8Z1A2B3C",
  "data": {
    "facebook": [
      {
        "period": "2026-03-01",
        "value": 2942350
      }
    ],
    "instagram": [
      {
        "period": "2026-03-01",
        "value": 2942350
      }
    ]
  }
}
{
  "error": {
    "code": "missing_api_key",
    "message": "Provide an API key using Authorization: Bearer <api_key>.",
    "requestId": "5d93d8de-0f6d-46a4-bd10-2e519b7e96bc",
    "details": {
      "validationErrors": [
        {
          "field": "query-string.limit",
          "location": "query-string",
          "expected": [
            "limit must not be greater than 100"
          ]
        }
      ]
    }
  }
}
{
  "error": {
    "code": "missing_api_key",
    "message": "Provide an API key using Authorization: Bearer <api_key>.",
    "requestId": "5d93d8de-0f6d-46a4-bd10-2e519b7e96bc",
    "details": {
      "validationErrors": [
        {
          "field": "query-string.limit",
          "location": "query-string",
          "expected": [
            "limit must not be greater than 100"
          ]
        }
      ]
    }
  }
}
{
  "error": {
    "code": "missing_api_key",
    "message": "Provide an API key using Authorization: Bearer <api_key>.",
    "requestId": "5d93d8de-0f6d-46a4-bd10-2e519b7e96bc",
    "details": {
      "validationErrors": [
        {
          "field": "query-string.limit",
          "location": "query-string",
          "expected": [
            "limit must not be greater than 100"
          ]
        }
      ]
    }
  }
}
{
  "error": {
    "code": "missing_api_key",
    "message": "Provide an API key using Authorization: Bearer <api_key>.",
    "requestId": "5d93d8de-0f6d-46a4-bd10-2e519b7e96bc",
    "details": {
      "validationErrors": [
        {
          "field": "query-string.limit",
          "location": "query-string",
          "expected": [
            "limit must not be greater than 100"
          ]
        }
      ]
    }
  }
}
{
  "error": {
    "code": "missing_api_key",
    "message": "Provide an API key using Authorization: Bearer <api_key>.",
    "requestId": "5d93d8de-0f6d-46a4-bd10-2e519b7e96bc",
    "details": {
      "validationErrors": [
        {
          "field": "query-string.limit",
          "location": "query-string",
          "expected": [
            "limit must not be greater than 100"
          ]
        }
      ]
    }
  }
}
{
  "error": {
    "code": "missing_api_key",
    "message": "Provide an API key using Authorization: Bearer <api_key>.",
    "requestId": "5d93d8de-0f6d-46a4-bd10-2e519b7e96bc",
    "details": {
      "validationErrors": [
        {
          "field": "query-string.limit",
          "location": "query-string",
          "expected": [
            "limit must not be greater than 100"
          ]
        }
      ]
    }
  }
}

List shop products

Returns the paginated list of Shopify best-selling products for a single shop. Products come from the shop’s Shopify best-seller feed and can be sorted by rank, price, or creation date.

Authorization

publicApiBearer
AuthorizationBearer <token>

Provide a Trendtrack Public API key using Authorization: Bearer <api_key>.

In: header

Path Parameters

shopId*string

Stable public shop identifier.

Query Parameters

limit?integer

Maximum number of products to return per page.

Default32
Range1 <= value <= 100
offset?integer

Offset into the products list.

Default0
Range0 <= value <= 10000
sortBy?string

Sort key. popularity orders by Shopify best-seller rank; price by product price; createdAt by Shopify product creation date.

Value in"popularity" | "price" | "createdAt"
order?string

Sort direction. Defaults to asc for popularity and desc otherwise.

Value in"asc" | "desc"

Response Body

application/json

application/json

application/json

application/json

application/json

application/json

application/json

curl -X GET "https://api.trendtrack.io/v1/shops/3f8aa146-6f96-46e8-9781-64db5166f9a8/products"
{
  "requestId": "req_01JN3C9Q2K5X9Y6V7W8Z1A2B3C",
  "data": [
    {
      "id": "7869034926321",
      "title": "Loop Quiet™ 2",
      "handle": "loop-quiet-2",
      "imageUrl": "https://cdn.shopify.com/s/files/1/1442/3288/files/PDP_QUIET_WHITE_01-805740.png",
      "productUrl": "https://loopearplugs.com/products/loop-quiet-2",
      "price": 19.95,
      "currency": "EUR",
      "rank": 1,
      "createdAt": "2024-08-20T00:00:00.000Z",
      "publishedAt": "2024-08-22T00:00:00.000Z"
    }
  ],
  "pagination": {
    "limit": 32,
    "offset": 0,
    "total": 128
  }
}
{
  "error": {
    "code": "missing_api_key",
    "message": "Provide an API key using Authorization: Bearer <api_key>.",
    "requestId": "5d93d8de-0f6d-46a4-bd10-2e519b7e96bc",
    "details": {
      "validationErrors": [
        {
          "field": "query-string.limit",
          "location": "query-string",
          "expected": [
            "limit must not be greater than 100"
          ]
        }
      ]
    }
  }
}
{
  "error": {
    "code": "missing_api_key",
    "message": "Provide an API key using Authorization: Bearer <api_key>.",
    "requestId": "5d93d8de-0f6d-46a4-bd10-2e519b7e96bc",
    "details": {
      "validationErrors": [
        {
          "field": "query-string.limit",
          "location": "query-string",
          "expected": [
            "limit must not be greater than 100"
          ]
        }
      ]
    }
  }
}
{
  "error": {
    "code": "missing_api_key",
    "message": "Provide an API key using Authorization: Bearer <api_key>.",
    "requestId": "5d93d8de-0f6d-46a4-bd10-2e519b7e96bc",
    "details": {
      "validationErrors": [
        {
          "field": "query-string.limit",
          "location": "query-string",
          "expected": [
            "limit must not be greater than 100"
          ]
        }
      ]
    }
  }
}
{
  "error": {
    "code": "missing_api_key",
    "message": "Provide an API key using Authorization: Bearer <api_key>.",
    "requestId": "5d93d8de-0f6d-46a4-bd10-2e519b7e96bc",
    "details": {
      "validationErrors": [
        {
          "field": "query-string.limit",
          "location": "query-string",
          "expected": [
            "limit must not be greater than 100"
          ]
        }
      ]
    }
  }
}
{
  "error": {
    "code": "missing_api_key",
    "message": "Provide an API key using Authorization: Bearer <api_key>.",
    "requestId": "5d93d8de-0f6d-46a4-bd10-2e519b7e96bc",
    "details": {
      "validationErrors": [
        {
          "field": "query-string.limit",
          "location": "query-string",
          "expected": [
            "limit must not be greater than 100"
          ]
        }
      ]
    }
  }
}
{
  "error": {
    "code": "missing_api_key",
    "message": "Provide an API key using Authorization: Bearer <api_key>.",
    "requestId": "5d93d8de-0f6d-46a4-bd10-2e519b7e96bc",
    "details": {
      "validationErrors": [
        {
          "field": "query-string.limit",
          "location": "query-string",
          "expected": [
            "limit must not be greater than 100"
          ]
        }
      ]
    }
  }
}

Resolve the current API credential

Previous Page

List shops

Next Page

search?string

Optional search string. For searchType="domain", send a domain or URL for exact domain/related-domain matching. For broad website text search, use shopContains. For product text, use productName. Do not send unsupported legacy keys name, domain, or domains.

searchType?string

Search mode. domain performs exact domain/related-domain matching from a domain or URL, productName searches indexed product text, and shopContains uses the broad website text-search index.

Value in"domain" | "productName" | "shopContains"
sortBy?string

Sort key for the advanced shops query surface. relevance falls back to monthlyVisits when the request does not produce a scored text query.

Value in"relevance" | "monthlyVisits" | "activeAds" | "growth30d" | "productsCount" | "createdAt"
order?string

Enum value accepted by this request. Allowed values: asc, desc.

Value in"asc" | "desc"
offset?number
Range0 <= value
limit?number
Range1 <= value <= 100
categoryIds?array<number>

Optional category ids used by the current shop discovery index.

minEstimatedRevenue?number

Optional minimum estimated revenue filter. This currently follows the same approximate indexed revenue model as the app.

Range0 <= value
maxEstimatedRevenue?number

Optional maximum estimated revenue filter. This currently follows the same approximate indexed revenue model as the app.

Range0 <= value
minMonthlyVisits?number
Range0 <= value
maxMonthlyVisits?number
Range0 <= value
minProductsCount?number
Range0 <= value
maxProductsCount?number
Range0 <= value
createdAfter?string
Formatdate
createdBefore?string
Formatdate
mainMarketCountries?array<string>

Optional main audience-market filter using uppercase ISO 3166-1 alpha-2 country codes matched against the indexed main_market field.

marketCountries?array<string>

Optional audience-market filter for shops where these countries appear among the indexed traffic markets.

excludeMarketCountries?array<string>
minBestSellerPrice?number
Range0 <= value
maxBestSellerPrice?number
Range0 <= value
minActiveAds?number

Optional minimum active ads filter. The metric follows adsTimePeriod.

Range0 <= value
maxActiveAds?number

Optional maximum active ads filter. The metric follows adsTimePeriod.

Range0 <= value
adsTimePeriod?string

Time window accepted by this request. Allowed values: last24h, last7d, last30d.

Value in"last24h" | "last7d" | "last30d"
isShopifyPlus?boolean
trafficGrowth?array<>

Traffic growth filters. Each condition uses period, comparison, and value; optional operator links the condition to the next one.

adsGrowth?array<>

Ads growth filters. Each condition uses period, comparison, and value; optional operator links the condition to the next one.

pageReachGrowth?array<>

Page reach growth filters. Each condition uses period, comparison, and value; optional operator links the condition to the next one.

adReachGrowth?array<>

Ad reach growth filters. Each condition uses period, comparison, and value; optional operator links the condition to the next one.

creationCountries?array<string>
excludeCreationCountries?array<string>
themeIds?array<string>

Optional indexed Shopify theme identifier strings backed by the current website discovery index. These are ids, not display names.

pixelIds?array<string>

Optional stable pixel/technology ids backed by the current website discovery index. These are ids, not display names such as "Meta".

excludePixelIds?array<string>

Optional stable pixel/technology ids to exclude. These are ids, not display names.

shopifyAppIds?array<number>

Optional Shopify app identifiers backed by the current website discovery index.

excludeShopifyAppIds?array<number>
minTrustpilotRating?number
Range0 <= value
maxTrustpilotRating?number
Range0 <= value
minTrustpilotReviewCount?number
Range0 <= value
maxTrustpilotReviewCount?number
Range0 <= value
languages?array<string>
currencies?array<string>
dtcRegion?string

Optional DTC preset. all means any indexed DTC shop, while us and eu also apply the corresponding creation-country subset used by the app.

Value in"all" | "us" | "eu"