Trendtrack
ReferenceAPI

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.

order?string

Optional sort order. Defaults to desc.

offset?integer

Pagination offset. Defaults to 0.

limit?integer

Maximum number of shops to return. Defaults to 32.

minMonthlyVisits?integer

Optional minimum monthly visits filter.

maxMonthlyVisits?integer

Optional maximum monthly visits filter.

minActiveAds?number

Optional minimum active ads filter. The metric follows adsTimePeriod.

maxActiveAds?number

Optional maximum active ads filter. The metric follows adsTimePeriod.

adsTimePeriod?string

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

hasTikTok?boolean

Optional TikTok presence filter backed by the legacy flat shop index. true requires an indexed TikTok page or handle; false excludes shops with one.

minTikTokFollowers?number
maxTikTokFollowers?number
minTikTokActiveAds?number
maxTikTokActiveAds?number
minTikTokTotalPosts?number
maxTikTokTotalPosts?number
minProductsCount?integer

Optional minimum products count filter.

maxProductsCount?integer

Optional maximum products count filter.

createdAfter?string

Optional inclusive lower bound for shop creation date.

createdBefore?string

Optional inclusive upper bound for shop creation date.

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<>

Optional canonical pixel UUIDs. Uses the same index fields as POST /v1/shops/query pixelIds. Resolve display names through /v1/facets/pixels.

excludePixelIds?array<>

Optional canonical pixel UUIDs to exclude. Uses the same index fields as POST /v1/shops/query excludePixelIds.

shopifyAppIds?array<>

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

excludeShopifyAppIds?array<>

Optional canonical Shopify app UUIDs 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.

maxTrustpilotRating?number

Optional maximum Trustpilot rating filter.

minTrustpilotReviewCount?integer

Optional minimum Trustpilot reviews filter.

maxTrustpilotReviewCount?integer

Optional maximum Trustpilot reviews filter.

minMonthlySales?integer

Minimum estimated revenue over the last 30 days, in USD (sales tracker). Shops the tracker does not follow are excluded.

maxMonthlySales?integer

Maximum estimated revenue over the last 30 days, in USD (sales tracker).

minUnitsSold?integer

Minimum units sold over the last 30 days (sales tracker). Shops the tracker does not follow are excluded.

maxUnitsSold?integer

Maximum units sold over the last 30 days (sales tracker).

Response Body

application/json

application/json

application/json

application/json

application/json

curl -X GET "https://example.com/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          }        ]      },      "sales": {        "currency": "USD",        "estMonthlySales": 222540,        "unitsSold": 1823      },      "advertising": {        "totalAds": 18185,        "activeAds": 12,        "linkedAdvertisersCount": 2,        "history": [          {            "period": "2026-03-01",            "value": 2942350          }        ],        "topCountries": [          {            "countryCode": "US",            "share": 0.64          }        ]      },      "tiktok": {        "hasTikTok": true,        "pageId": "6802334614847603717",        "handle": "examplebrand",        "profileMetrics": {          "followers": 128430,          "totalPosts": 342,          "newPosts": 12,          "totalViews": 9823431,          "totalLikes": 456789        },        "activity": {          "activeAds": 7,          "totalAds": 33,          "avgActiveAds7d": 5.5,          "avgActiveAds30d": 4.25        },        "lastUpdatedAt": "2026-06-05T08:30:00.000Z"      },      "googleAds": {        "status": "available",        "liveAds": 14,        "adsLaunched30d": 5,        "reach": {          "value": 245000,          "label": "Google reported reach",          "euUkOnly": false        },        "topCountries": [          {            "code": "FR",            "ads": 12,            "reach": 185000          }        ],        "platformMix": [          {            "platform": "SEARCH",            "ads": 8          }        ]      },      "latestAds": [        {          "id": "facebook_1059447873925448",          "mediaType": "video",          "mediaUrl": "https://medias.trendtrack.io/video/facebook/1317841346869775.mp4",          "thumbnailUrl": "https://medias.trendtrack.io/thumbnails/facebook/1317841346869775.jpg"        }      ],      "details": {        "trustpilot": {          "rating": 4.3,          "reviewCount": 1280        },        "socials": {          "totalFollowers": 426558,          "facebookLikes": 79431,          "instagramFollowers": 339083,          "tiktokFollowers": 8044        },        "apps": [          {            "id": "da731807-3667-4cc4-8ea0-39727b50b2d5",            "label": "Klaviyo",            "iconUrl": "string"          }        ],        "adReach": 1250000,        "bestSellersAvgPrice": {          "amount": 76.85,          "currency": "USD"        }      }    }  ],  "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"          ]        }      ]    }  }}

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.

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 matches website text, keeping the 10,000 most relevant shops before filters and sorting are applied.

sortBy?string

Sort key for the advanced shops query surface. relevance orders by monthlyVisits, as in the Trendtrack app: the search text filters shops but does not rank them.

order?string

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

offset?number
limit?number
categoryIds?array<number>

Optional category ids used by the current shop discovery index.

minEstimatedRevenue?number
Deprecated

Deprecated and rejected with 400: use minMonthlySales, read from the sales tracker.

maxEstimatedRevenue?number
Deprecated

Deprecated and rejected with 400: use maxMonthlySales, read from the sales tracker.

minMonthlySales?number

Minimum estimated revenue over the last 30 days, in USD (sales tracker). Shops the tracker does not follow are excluded.

maxMonthlySales?number

Maximum estimated revenue over the last 30 days, in USD (sales tracker).

minUnitsSold?number

Minimum units sold over the last 30 days (sales tracker). Shops the tracker does not follow are excluded.

maxUnitsSold?number

Maximum units sold over the last 30 days (sales tracker).

minMonthlyVisits?number
maxMonthlyVisits?number
minProductsCount?number
maxProductsCount?number
createdAfter?string
createdBefore?string
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
maxBestSellerPrice?number
minActiveAds?number

Optional minimum active ads filter. The metric follows adsTimePeriod.

maxActiveAds?number

Optional maximum active ads filter. The metric follows adsTimePeriod.

adsTimePeriod?string

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

hasTikTok?boolean

Optional TikTok presence filter backed by the legacy flat shop index. true requires an indexed TikTok page or handle; false excludes shops with one.

minTikTokFollowers?number
maxTikTokFollowers?number
minTikTokActiveAds?number
maxTikTokActiveAds?number
minTikTokTotalPosts?number
maxTikTokTotalPosts?number
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>
displayInTrending?boolean

When true, restricts results to shops visible in the Trendtrack trending shops feed.

themeIds?array<>

Optional canonical Shopify theme UUIDs backed by the current website discovery index. Use /v1/facets/themes to resolve display names.

pixelIds?array<>

Optional canonical pixel UUIDs backed by the current website discovery index. Use /v1/facets/pixels to resolve display names.

excludePixelIds?array<>

Optional canonical pixel UUIDs to exclude. Use /v1/facets/pixels to resolve display names.

shopifyAppIds?array<>

Optional canonical Shopify app UUIDs backed by the current website discovery index. Use /v1/facets/shopify-apps to resolve names to ids.

excludeShopifyAppIds?array<>

Optional canonical Shopify app UUIDs to exclude. Use /v1/facets/shopify-apps to resolve names to ids.

minTrustpilotRating?number
maxTrustpilotRating?number
minTrustpilotReviewCount?number
maxTrustpilotReviewCount?number
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.

include?array<>

Optional shop-detail fields to return in each shop's details object, so a filtered search needs no follow-up GET /v1/shops/{shopId}. Any non-empty list bills 1 extra credit per returned shop (5 instead of 4).

Response Body

application/json

application/json

application/json

application/json

application/json

curl -X POST "https://example.com/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          }        ]      },      "sales": {        "currency": "USD",        "estMonthlySales": 222540,        "unitsSold": 1823      },      "advertising": {        "totalAds": 18185,        "activeAds": 12,        "linkedAdvertisersCount": 2,        "history": [          {            "period": "2026-03-01",            "value": 2942350          }        ],        "topCountries": [          {            "countryCode": "US",            "share": 0.64          }        ]      },      "tiktok": {        "hasTikTok": true,        "pageId": "6802334614847603717",        "handle": "examplebrand",        "profileMetrics": {          "followers": 128430,          "totalPosts": 342,          "newPosts": 12,          "totalViews": 9823431,          "totalLikes": 456789        },        "activity": {          "activeAds": 7,          "totalAds": 33,          "avgActiveAds7d": 5.5,          "avgActiveAds30d": 4.25        },        "lastUpdatedAt": "2026-06-05T08:30:00.000Z"      },      "googleAds": {        "status": "available",        "liveAds": 14,        "adsLaunched30d": 5,        "reach": {          "value": 245000,          "label": "Google reported reach",          "euUkOnly": false        },        "topCountries": [          {            "code": "FR",            "ads": 12,            "reach": 185000          }        ],        "platformMix": [          {            "platform": "SEARCH",            "ads": 8          }        ]      },      "latestAds": [        {          "id": "facebook_1059447873925448",          "mediaType": "video",          "mediaUrl": "https://medias.trendtrack.io/video/facebook/1317841346869775.mp4",          "thumbnailUrl": "https://medias.trendtrack.io/thumbnails/facebook/1317841346869775.jpg"        }      ],      "details": {        "trustpilot": {          "rating": 4.3,          "reviewCount": 1280        },        "socials": {          "totalFollowers": 426558,          "facebookLikes": 79431,          "instagramFollowers": 339083,          "tiktokFollowers": 8044        },        "apps": [          {            "id": "da731807-3667-4cc4-8ea0-39727b50b2d5",            "label": "Klaviyo",            "iconUrl": "string"          }        ],        "adReach": 1250000,        "bestSellersAvgPrice": {          "amount": 76.85,          "currency": "USD"        }      }    }  ],  "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"          ]        }      ]    }  }}

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.

order?string

Optional sort order. Defaults to desc.

offset?integer

Pagination offset. Defaults to 0.

limit?integer

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

Response Body

application/json

application/json

application/json

application/json

application/json

application/json

curl -X GET "https://example.com/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            }          ]        },        "sales": {          "currency": "USD",          "estMonthlySales": 222540,          "unitsSold": 1823        },        "advertising": {          "totalAds": 18185,          "activeAds": 12,          "linkedAdvertisersCount": 2,          "history": [            {              "period": "2026-03-01",              "value": 2942350            }          ],          "topCountries": [            {              "countryCode": "US",              "share": 0.64            }          ]        },        "tiktok": {          "hasTikTok": true,          "pageId": "6802334614847603717",          "handle": "examplebrand",          "profileMetrics": {            "followers": 128430,            "totalPosts": 342,            "newPosts": 12,            "totalViews": 9823431,            "totalLikes": 456789          },          "activity": {            "activeAds": 7,            "totalAds": 33,            "avgActiveAds7d": 5.5,            "avgActiveAds30d": 4.25          },          "lastUpdatedAt": "2026-06-05T08:30:00.000Z"        },        "googleAds": {          "status": "available",          "liveAds": 14,          "adsLaunched30d": 5,          "reach": {            "value": 245000,            "label": "Google reported reach",            "euUkOnly": false          },          "topCountries": [            {              "code": "FR",              "ads": 12,              "reach": 185000            }          ],          "platformMix": [            {              "platform": "SEARCH",              "ads": 8            }          ]        },        "latestAds": [          {            "id": "facebook_1059447873925448",            "mediaType": "video",            "mediaUrl": "https://medias.trendtrack.io/video/facebook/1317841346869775.mp4",            "thumbnailUrl": "https://medias.trendtrack.io/thumbnails/facebook/1317841346869775.jpg"          }        ],        "details": {          "trustpilot": {            "rating": 4.3,            "reviewCount": 1280          },          "socials": {            "totalFollowers": 426558,            "facebookLikes": 79431,            "instagramFollowers": 339083,            "tiktokFollowers": 8044          },          "apps": [            {              "id": "da731807-3667-4cc4-8ea0-39727b50b2d5",              "label": "Klaviyo",              "iconUrl": "string"            }          ],          "adReach": 1250000,          "bestSellersAvgPrice": {            "amount": 76.85,            "currency": "USD"          }        }      },      "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"          ]        }      ]    }  }}

Finds the store products that look like an image, most similar first, one per shop by default (maxPerShop) and with the storefronts of one brand counted as one shop (groupBrands). Send the image as a multipart file or as a public URL; read the next pages with the returned searchId. Costs 4 credits per product returned.

Authorization

publicApiBearer
AuthorizationBearer <token>

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

In: header

Request Body

TypeScript Definitions

Use the request body type in TypeScript.

image?string

Image file (JPEG, PNG or WEBP, 10 MB max), sent as multipart/form-data. Provide exactly one of image, imageUrl or searchId.

imageUrl?string

Public http(s) URL of the image. The server downloads it (10 MB max).

searchId?string

searchId returned by a previous image search of this workspace. Replays the same image to read its next pages without sending it again.

offset?number
limit?number
groupBrands?boolean

Count the storefronts of one brand (same root domain across countries, or the same Shopify store on several domains) as one shop. False keeps every storefront apart; the same store on several domains always counts once.

maxPerShop?number

Products returned per shop (or brand), most similar first; 0 = no cap. A product repeated in one shop (variants, duplicate photos) is always returned once.

Response Body

application/json

application/json

application/json

application/json

application/json

application/json

application/json

curl -X POST "https://example.com/v1/products/image-search" \  -H "Content-Type: application/json" \  -d '{}'
{  "requestId": "string",  "data": [    {      "product": {        "shopifyId": 7429183447215,        "title": "Moon lamp",        "imageUrl": "string",        "price": 29.9,        "currency": "USD",        "similarityScore": 0.91      },      "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            }          ]        },        "sales": {          "currency": "USD",          "estMonthlySales": 222540,          "unitsSold": 1823        },        "advertising": {          "totalAds": 18185,          "activeAds": 12,          "linkedAdvertisersCount": 2,          "history": [            {              "period": "2026-03-01",              "value": 2942350            }          ],          "topCountries": [            {              "countryCode": "US",              "share": 0.64            }          ]        },        "tiktok": {          "hasTikTok": true,          "pageId": "6802334614847603717",          "handle": "examplebrand",          "profileMetrics": {            "followers": 128430,            "totalPosts": 342,            "newPosts": 12,            "totalViews": 9823431,            "totalLikes": 456789          },          "activity": {            "activeAds": 7,            "totalAds": 33,            "avgActiveAds7d": 5.5,            "avgActiveAds30d": 4.25          },          "lastUpdatedAt": "2026-06-05T08:30:00.000Z"        },        "googleAds": {          "status": "available",          "liveAds": 14,          "adsLaunched30d": 5,          "reach": {            "value": 245000,            "label": "Google reported reach",            "euUkOnly": false          },          "topCountries": [            {              "code": "FR",              "ads": 12,              "reach": 185000            }          ],          "platformMix": [            {              "platform": "SEARCH",              "ads": 8            }          ]        },        "latestAds": [          {            "id": "facebook_1059447873925448",            "mediaType": "video",            "mediaUrl": "https://medias.trendtrack.io/video/facebook/1317841346869775.mp4",            "thumbnailUrl": "https://medias.trendtrack.io/thumbnails/facebook/1317841346869775.jpg"          }        ],        "details": {          "trustpilot": {            "rating": 4.3,            "reviewCount": 1280          },          "socials": {            "totalFollowers": 426558,            "facebookLikes": 79431,            "instagramFollowers": 339083,            "tiktokFollowers": 8044          },          "apps": [            {              "id": "da731807-3667-4cc4-8ea0-39727b50b2d5",              "label": "Klaviyo",              "iconUrl": "string"            }          ],          "adReach": 1250000,          "bestSellersAvgPrice": {            "amount": 76.85,            "currency": "USD"          }        }      }    }  ],  "pagination": {    "limit": 32,    "offset": 0,    "total": 128  },  "meta": {    "searchId": "9b1a67f9-9477-48e5-8a6c-11b70245e1d9"  }}
{  "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"          ]        }      ]    }  }}

Finds the shops selling products that look like an image, the most active advertisers (Meta active ads) first, each with its most similar products. The storefronts of one brand come back as one row with otherStorefronts, billed once (groupBrands). Send the image as a multipart file or as a public URL; read the next pages with the returned searchId. Costs 4 credits per shop returned.

Authorization

publicApiBearer
AuthorizationBearer <token>

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

In: header

Request Body

TypeScript Definitions

Use the request body type in TypeScript.

image?string

Image file (JPEG, PNG or WEBP, 10 MB max), sent as multipart/form-data. Provide exactly one of image, imageUrl or searchId.

imageUrl?string

Public http(s) URL of the image. The server downloads it (10 MB max).

searchId?string

searchId returned by a previous image search of this workspace. Replays the same image to read its next pages without sending it again.

offset?number
limit?number
groupBrands?boolean

Count the storefronts of one brand (same root domain across countries, or the same Shopify store on several domains) as one shop. False keeps every storefront apart; the same store on several domains always counts once.

productsPerShop?number

Most similar matching products returned with each shop.

Response Body

application/json

application/json

application/json

application/json

application/json

application/json

application/json

curl -X POST "https://example.com/v1/shops/image-search" \  -H "Content-Type: application/json" \  -d '{}'
{  "requestId": "string",  "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            }          ]        },        "sales": {          "currency": "USD",          "estMonthlySales": 222540,          "unitsSold": 1823        },        "advertising": {          "totalAds": 18185,          "activeAds": 12,          "linkedAdvertisersCount": 2,          "history": [            {              "period": "2026-03-01",              "value": 2942350            }          ],          "topCountries": [            {              "countryCode": "US",              "share": 0.64            }          ]        },        "tiktok": {          "hasTikTok": true,          "pageId": "6802334614847603717",          "handle": "examplebrand",          "profileMetrics": {            "followers": 128430,            "totalPosts": 342,            "newPosts": 12,            "totalViews": 9823431,            "totalLikes": 456789          },          "activity": {            "activeAds": 7,            "totalAds": 33,            "avgActiveAds7d": 5.5,            "avgActiveAds30d": 4.25          },          "lastUpdatedAt": "2026-06-05T08:30:00.000Z"        },        "googleAds": {          "status": "available",          "liveAds": 14,          "adsLaunched30d": 5,          "reach": {            "value": 245000,            "label": "Google reported reach",            "euUkOnly": false          },          "topCountries": [            {              "code": "FR",              "ads": 12,              "reach": 185000            }          ],          "platformMix": [            {              "platform": "SEARCH",              "ads": 8            }          ]        },        "latestAds": [          {            "id": "facebook_1059447873925448",            "mediaType": "video",            "mediaUrl": "https://medias.trendtrack.io/video/facebook/1317841346869775.mp4",            "thumbnailUrl": "https://medias.trendtrack.io/thumbnails/facebook/1317841346869775.jpg"          }        ],        "details": {          "trustpilot": {            "rating": 4.3,            "reviewCount": 1280          },          "socials": {            "totalFollowers": 426558,            "facebookLikes": 79431,            "instagramFollowers": 339083,            "tiktokFollowers": 8044          },          "apps": [            {              "id": "da731807-3667-4cc4-8ea0-39727b50b2d5",              "label": "Klaviyo",              "iconUrl": "string"            }          ],          "adReach": 1250000,          "bestSellersAvgPrice": {            "amount": 76.85,            "currency": "USD"          }        }      },      "otherStorefronts": [        {          "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",          "domain": "fridoorthotics.com",          "name": "string",          "monthlyVisits": 0,          "activeAds": 0        }      ],      "bestSimilarityScore": 0.93,      "matchingProducts": 4,      "products": [        {          "shopifyId": 7429183447215,          "title": "Moon lamp",          "imageUrl": "string",          "price": 29.9,          "currency": "USD",          "similarityScore": 0.91        }      ]    }  ],  "pagination": {    "limit": 32,    "offset": 0,    "total": 128  },  "meta": {    "searchId": "9b1a67f9-9477-48e5-8a6c-11b70245e1d9"  }}
{  "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"          ]        }      ]    }  }}

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

Response Body

application/json

application/json

application/json

application/json

application/json

application/json

application/json

curl -X GET "https://example.com/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"          ]        }      ]    }  }}

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.

days?integer

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

Response Body

application/json

application/json

application/json

application/json

application/json

application/json

application/json

curl -X GET "https://example.com/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"          ]        }      ]    }  }}

Returns the daily readings of the sales tracker for a shop: estimated revenue and units sold, each over the 30 days before the reading. Estimates, in USD. Costs 4 credits per call.

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

One reading per day, week or month. Week and month keep the last daily reading of each bucket; readings are never summed, since each one already covers the 30 days before it.

days?integer

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

Response Body

application/json

application/json

application/json

application/json

application/json

application/json

application/json

curl -X GET "https://example.com/v1/shops/3f8aa146-6f96-46e8-9781-64db5166f9a8/sales/history"
{  "requestId": "req_01JN3C9Q2K5X9Y6V7W8Z1A2B3C",  "data": {    "currency": "USD",    "history": [      {        "date": "2026-09-29",        "estMonthlySales": 222540,        "estMonthlySalesMin": 170450,        "estMonthlySalesMax": 274103,        "unitsSold": 1823      }    ]  }}
{  "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"          ]        }      ]    }  }}

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. For estimated sales, ads and selling countries per product, use GET /v1/products?shopId={shopId}.

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.

offset?integer

Offset into the products list.

sortBy?string

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

order?string

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

Response Body

application/json

application/json

application/json

application/json

application/json

application/json

application/json

curl -X GET "https://example.com/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"          ]        }      ]    }  }}

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://example.com/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        }      ]    },    "sales": {      "currency": "USD",      "estMonthlySales": 222540,      "unitsSold": 1823,      "estMonthlySalesMin": 170450,      "estMonthlySalesMax": 274103    },    "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": []        }      ]    },    "tiktok": {      "hasTikTok": true,      "pageId": "6802334614847603717",      "handle": "examplebrand",      "profileMetrics": {        "followers": 128430,        "totalPosts": 342,        "newPosts": 12,        "totalViews": 9823431,        "totalLikes": 456789      },      "activity": {        "activeAds": 7,        "totalAds": 33,        "avgActiveAds7d": 5.5,        "avgActiveAds30d": 4.25      },      "lastUpdatedAt": "2026-06-05T08:30:00.000Z"    },    "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              }            ]          },          "sales": {            "currency": "USD",            "estMonthlySales": 222540,            "unitsSold": 1823          },          "advertising": {            "totalAds": 18185,            "activeAds": 12,            "linkedAdvertisersCount": 2,            "history": [              {                "period": "2026-03-01",                "value": 2942350              }            ],            "topCountries": [              {                "countryCode": "US",                "share": 0.64              }            ]          },          "tiktok": {            "hasTikTok": true,            "pageId": "6802334614847603717",            "handle": "examplebrand",            "profileMetrics": {              "followers": 128430,              "totalPosts": 342,              "newPosts": 12,              "totalViews": 9823431,              "totalLikes": 456789            },            "activity": {              "activeAds": 7,              "totalAds": 33,              "avgActiveAds7d": 5.5,              "avgActiveAds30d": 4.25            },            "lastUpdatedAt": "2026-06-05T08:30:00.000Z"          },          "googleAds": {            "status": "available",            "liveAds": 14,            "adsLaunched30d": 5,            "reach": {              "value": 245000,              "label": "Google reported reach",              "euUkOnly": false            },            "topCountries": [              {                "code": "FR",                "ads": 12,                "reach": 185000              }            ],            "platformMix": [              {                "platform": "SEARCH",                "ads": 8              }            ]          },          "latestAds": [            {              "id": "facebook_1059447873925448",              "mediaType": "video",              "mediaUrl": "https://medias.trendtrack.io/video/facebook/1317841346869775.mp4",              "thumbnailUrl": "https://medias.trendtrack.io/thumbnails/facebook/1317841346869775.jpg"            }          ],          "details": {            "trustpilot": {              "rating": 4.3,              "reviewCount": 1280            },            "socials": {              "totalFollowers": 426558,              "facebookLikes": 79431,              "instagramFollowers": 339083,              "tiktokFollowers": 8044            },            "apps": [              {                "id": "da731807-3667-4cc4-8ea0-39727b50b2d5",                "label": "Klaviyo",                "iconUrl": "string"              }            ],            "adReach": 1250000,            "bestSellersAvgPrice": {              "amount": 76.85,              "currency": "USD"            }          }        },        "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"          ]        }      ]    }  }}