Products
List products
Searches the products catalogue (the app's Products screen) by name, sorted by best-seller rank, recency, estimated sales, ad pressure or EU spend. Use POST /v1/products/query for every filter.
Authorization
publicApiBearer Provide a Trendtrack Public API key using Authorization: Bearer <api_key>.
In: header
Query Parameters
Searched in product names. "a + b": all words; "a / b": at least one; "-c" excludes.
length <= 200relevance: estimated monthly revenue and active ads multiplied (ln(2 + revenue) × ln(2 + active ads)²), so a product needs both to rank high and active ads weigh the most; it multiplies the text match when query is set. best-selling: shop best-seller rank. newest: Shopify publish date. est-sales: estimated revenue. ad-pressure: share of the shop's active ads on the product. spend: EU ad spend (Pro plans and above).
"best-selling""relevance" | "best-selling" | "newest" | "est-sales" | "active-ads" | "ad-pressure" | "spend" | "spend-14d"Defaults to asc for best-selling, desc for the others. Missing values always come last.
"asc" | "desc"One shop's catalogue instead of the whole index.
uuid251 <= value <= 100pagination.nextCursor of the previous page.
length <= 2000Response Body
application/json
application/json
application/json
application/json
application/json
application/json
application/json
application/json
curl -X GET "https://api.trendtrack.io/v1/products"{ "requestId": "string", "data": [ { "id": "3f8aa146-6f96-46e8-9781-64db5166f9a8:7915404542236", "shopifyId": "7915404542236", "title": "Loop Quiet 2", "description": "string", "url": "https://loopearplugs.com/products/loop-quiet-2", "handle": "loop-quiet-2", "imageUrl": "string", "publishedAt": "string", "price": { "amount": 39.9, "currency": "EUR", "amountUsd": 43.5, "compareAtAmount": 59.9, "onSale": true, "discountPercent": 33, "isSubscription": true, "promoTypes": [ "percent-off" ] }, "reviews": { "rating": 4.7, "count": 1280 }, "bestSellerRank": { "position": 3, "percentile": 2.5 }, "optionNames": [ "Color", "Size" ], "sales": { "dailyRevenueUsd": 1200, "dailyRevenueRangeUsd": { "min": 0, "mean": 0, "max": 0 }, "monthlyRevenueUsd": 36000, "dailyUnitsSold": 30, "monthlyUnitsSold": 900 }, "ads": { "active": 12, "total": 30, "launched30d": 8, "weekOverWeekGrowth": 25, "adShare": 40, "advertisersCount": 3, "hasPartnershipAds": true, "previewUrls": [ "string" ], "activeByCountry": [ { "countryCode": "US", "activeAds": 12 } ], "sellingCountries": [ "US", "CA" ] }, "euMetrics": { "locked": true, "spendUsd": 4500, "dailySpendUsd": 150, "reach": 500000, "spendShare": 12.5, "reachByCountry": [ { "countryCode": "FR", "reach": 500000 } ] }, "weeklyHistory": [ { "from": "2019-08-24", "to": "2019-08-24", "activeAds": 0, "euDailySpendUsd": 0, "euDailyReach": 0 } ], "shop": { "id": "3f8aa146-6f96-46e8-9781-64db5166f9a8", "domain": "loopearplugs.com", "name": "string", "avatarUrl": "string", "countryCode": "BE", "currency": "EUR", "productsCount": 0, "monthlyVisits": 0, "monthlyRevenueUsd": 0, "createdAt": "2019-08-24", "categoryIds": [ 0 ] } } ], "pagination": { "limit": 25, "total": 1250, "totalRelation": "eq", "nextCursor": "string" }}{ "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" ] } ] } }}{ "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 products
The products catalogue with every filter of the app's Products screen: price, reviews, best-seller rank, launch date, promotions, selling countries, estimated sales and units, ads (active, launched, share, partnership), EU/UK spend, and the shop's niche, traffic, origin and technologies. EU/UK data (euAdSpend, spendShare, sortBy=spend, euMetrics) opens on Pro plans and above.
Authorization
publicApiBearer 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.
Searched in product names. "a + b": all words; "a / b": at least one; "-c" excludes.
length <= 200relevance: estimated monthly revenue and active ads multiplied (ln(2 + revenue) × ln(2 + active ads)²), so a product needs both to rank high and active ads weigh the most; it multiplies the text match when query is set. best-selling: shop best-seller rank. newest: Shopify publish date. est-sales: estimated revenue. ad-pressure: share of the shop's active ads on the product. spend: EU ad spend (Pro plans and above).
"best-selling""relevance" | "best-selling" | "newest" | "est-sales" | "active-ads" | "ad-pressure" | "spend" | "spend-14d"Defaults to asc for best-selling, desc for the others. Missing values always come last.
"asc" | "desc"One shop's catalogue instead of the whole index.
uuid251 <= value <= 100pagination.nextCursor of the previous page.
length <= 2000Where query is searched.
["productName"]CPM (USD) turning EU reach into estimated spend. Defaults to 9.
0.01 <= value <= 1000"subscription" | "one-time"Shopify creation date, inclusive.
dateShopify creation date, inclusive.
dateOnly percent-off (a compare-at price) is told apart; any other type finds nothing.
Shop currency, ISO 4217. Values: /v1/products/facets.
Shop origin, ISO alpha-2. Values: /v1/products/facets.
Countries where the product has active ads (or active EU/UK reach, see sellingCountriesBasis), ISO alpha-2.
The product's main selling country is one of these, ISO alpha-2.
Countries where the product must not be active, ISO alpha-2.
adCount: countries with active ads. reach: EU/UK countries with active reach.
"adCount""adCount" | "reach"Shop niche, Google category ids (/v1/facets/categories).
Shop creation date, inclusive.
dateShop creation date, inclusive.
dateThe shop's top visitor countries, ISO alpha-2. Values: /v1/products/facets.
Shop pixels (/v1/facets/pixels).
Shopify apps (/v1/facets/shopify-apps).
Shopify themes (/v1/facets/themes).
Window of minAdsLaunched / maxAdsLaunched: 7, 14 or 30 days, or all time. Required with them.
"7d" | "14d" | "30d" | "all"Minimum ads launched for the product over adsLaunchedPeriod.
0 <= valueMaximum ads launched for the product over adsLaunchedPeriod.
0 <= valuetrue: at least one partnership ad. false: none known.
Minimum. Product price, USD. Products priced 0 are left out once set.
0 <= valueMaximum. Product price, USD. Products priced 0 are left out once set.
0 <= valueMinimum. Average review rating.
0 <= valueMaximum. Average review rating.
0 <= valueMinimum. Number of reviews.
0 <= valueMaximum. Number of reviews.
0 <= valueMinimum. Rank in the shop's Shopify best-seller collection, 1-100.
0 <= valueMaximum. Rank in the shop's Shopify best-seller collection, 1-100.
0 <= valueMinimum. Estimated revenue over the last 30 days, USD. Products the sales tracker does not follow never match.
0 <= valueMaximum. Estimated revenue over the last 30 days, USD. Products the sales tracker does not follow never match.
0 <= valueMinimum. Estimated units sold over the last 30 days.
0 <= valueMaximum. Estimated units sold over the last 30 days.
0 <= valueMinimum. Active Meta ads pushing the product.
0 <= valueMaximum. Active Meta ads pushing the product.
0 <= valueMinimum. Share of the shop's active ads pushing the product, in %.
0 <= valueMaximum. Share of the shop's active ads pushing the product, in %.
0 <= valueMinimum. Total EU ad spend, USD (EU reach x cpm / 1000). EU/UK data: Pro plans and above.
0 <= valueMaximum. Total EU ad spend, USD (EU reach x cpm / 1000). EU/UK data: Pro plans and above.
0 <= valueMinimum. EU reach of the product over the EU reach of the pages pushing it, in %. EU/UK data: Pro plans and above.
0 <= valueMaximum. EU reach of the product over the EU reach of the pages pushing it, in %. EU/UK data: Pro plans and above.
0 <= valueMinimum. Shop monthly visits.
0 <= valueMaximum. Shop monthly visits.
0 <= valueMinimum. Shop traffic change over 30 days, in % (negative for a decline).
-100 <= valueMaximum. Shop traffic change over 30 days, in % (negative for a decline).
-100 <= valueMinimum. Number of products in the shop.
0 <= valueMaximum. Number of products in the shop.
0 <= valueResponse Body
application/json
application/json
application/json
application/json
application/json
application/json
application/json
application/json
curl -X POST "https://api.trendtrack.io/v1/products/query" \ -H "Content-Type: application/json" \ -d '{}'{ "requestId": "string", "data": [ { "id": "3f8aa146-6f96-46e8-9781-64db5166f9a8:7915404542236", "shopifyId": "7915404542236", "title": "Loop Quiet 2", "description": "string", "url": "https://loopearplugs.com/products/loop-quiet-2", "handle": "loop-quiet-2", "imageUrl": "string", "publishedAt": "string", "price": { "amount": 39.9, "currency": "EUR", "amountUsd": 43.5, "compareAtAmount": 59.9, "onSale": true, "discountPercent": 33, "isSubscription": true, "promoTypes": [ "percent-off" ] }, "reviews": { "rating": 4.7, "count": 1280 }, "bestSellerRank": { "position": 3, "percentile": 2.5 }, "optionNames": [ "Color", "Size" ], "sales": { "dailyRevenueUsd": 1200, "dailyRevenueRangeUsd": { "min": 0, "mean": 0, "max": 0 }, "monthlyRevenueUsd": 36000, "dailyUnitsSold": 30, "monthlyUnitsSold": 900 }, "ads": { "active": 12, "total": 30, "launched30d": 8, "weekOverWeekGrowth": 25, "adShare": 40, "advertisersCount": 3, "hasPartnershipAds": true, "previewUrls": [ "string" ], "activeByCountry": [ { "countryCode": "US", "activeAds": 12 } ], "sellingCountries": [ "US", "CA" ] }, "euMetrics": { "locked": true, "spendUsd": 4500, "dailySpendUsd": 150, "reach": 500000, "spendShare": 12.5, "reachByCountry": [ { "countryCode": "FR", "reach": 500000 } ] }, "weeklyHistory": [ { "from": "2019-08-24", "to": "2019-08-24", "activeAds": 0, "euDailySpendUsd": 0, "euDailyReach": 0 } ], "shop": { "id": "3f8aa146-6f96-46e8-9781-64db5166f9a8", "domain": "loopearplugs.com", "name": "string", "avatarUrl": "string", "countryCode": "BE", "currency": "EUR", "productsCount": 0, "monthlyVisits": 0, "monthlyRevenueUsd": 0, "createdAt": "2019-08-24", "categoryIds": [ 0 ] } } ], "pagination": { "limit": 25, "total": 1250, "totalRelation": "eq", "nextCursor": "string" }}{ "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" ] } ] } }}{ "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 product filter values
Currencies, shop origins and shop visitor countries across the products catalogue, with product counts.
Authorization
publicApiBearer Provide a Trendtrack Public API key using Authorization: Bearer <api_key>.
In: header
Response Body
application/json
application/json
application/json
application/json
application/json
application/json
application/json
application/json
curl -X GET "https://api.trendtrack.io/v1/products/facets"{ "requestId": "string", "data": { "currencies": [ { "value": "US", "count": 120000 } ], "shopCountries": [ { "value": "US", "count": 120000 } ], "shopVisitorCountries": [ { "value": "US", "count": 120000 } ] }}{ "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" ] } ] } }}{ "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" ] } ] } }}Look up a product by its page url
Finds the catalogue product behind a Shopify product page url, with its full sheet. Same payload as GET /v1/products/{productId}.
Authorization
publicApiBearer Provide a Trendtrack Public API key using Authorization: Bearer <api_key>.
In: header
Query Parameters
A Shopify product page: https:///products/.
length <= 2000Response Body
application/json
application/json
application/json
application/json
application/json
application/json
application/json
application/json
curl -X GET "https://api.trendtrack.io/v1/products/lookup?url=https%3A%2F%2Floopearplugs.com%2Fproducts%2Floop-quiet-2"{ "requestId": "string", "data": { "id": "3f8aa146-6f96-46e8-9781-64db5166f9a8:7915404542236", "shopifyId": "7915404542236", "title": "Loop Quiet 2", "description": "string", "url": "https://loopearplugs.com/products/loop-quiet-2", "handle": "loop-quiet-2", "imageUrl": "string", "publishedAt": "string", "price": { "amount": 39.9, "currency": "EUR", "amountUsd": 43.5, "compareAtAmount": 59.9, "onSale": true, "discountPercent": 33, "isSubscription": true, "promoTypes": [ "percent-off" ] }, "reviews": { "rating": 4.7, "count": 1280 }, "bestSellerRank": { "position": 3, "percentile": 2.5 }, "optionNames": [ "Color", "Size" ], "sales": { "dailyRevenueUsd": 1200, "dailyRevenueRangeUsd": { "min": 0, "mean": 0, "max": 0 }, "monthlyRevenueUsd": 36000, "dailyUnitsSold": 30, "monthlyUnitsSold": 900 }, "ads": { "active": 12, "total": 30, "launched30d": 8, "weekOverWeekGrowth": 25, "adShare": 40, "advertisersCount": 3, "hasPartnershipAds": true, "previewUrls": [ "string" ], "activeByCountry": [ { "countryCode": "US", "activeAds": 12 } ], "sellingCountries": [ "US", "CA" ] }, "euMetrics": { "locked": true, "spendUsd": 4500, "dailySpendUsd": 150, "reach": 500000, "spendShare": 12.5, "reachByCountry": [ { "countryCode": "FR", "reach": 500000 } ] }, "weeklyHistory": [ { "from": "2019-08-24", "to": "2019-08-24", "activeAds": 0, "euDailySpendUsd": 0, "euDailyReach": 0 } ], "shop": { "id": "3f8aa146-6f96-46e8-9781-64db5166f9a8", "domain": "loopearplugs.com", "name": "string", "avatarUrl": "string", "countryCode": "BE", "currency": "EUR", "productsCount": 0, "monthlyVisits": 0, "monthlyRevenueUsd": 0, "createdAt": "2019-08-24", "categoryIds": [ 0 ] }, "detail": { "images": [ "string" ], "productType": "string", "options": [ { "name": "Color", "values": [ "Black", "White" ] } ], "sellingPlans": [ { "name": "Color", "values": [ "Black", "White" ] } ], "mediaCount": 0, "shopActiveAds": 0, "dailySales": [ { "date": "2019-08-24", "revenueUsd": 0 } ] } }}{ "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" ] } ] } }}{ "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 a product's ads
The Meta ads that link to the product page, newest first, in the /v1/ads format. Ad ids work with /v1/ads/{adId} and as board items.
Authorization
publicApiBearer Provide a Trendtrack Public API key using Authorization: Bearer <api_key>.
In: header
Path Parameters
The id returned by product search: {shopId}:{shopifyId}, or {shopId}:handle:{handle}.
Query Parameters
"all""active" | "inactive" | "all"11 <= value <= 100241 <= value <= 50Response Body
application/json
application/json
application/json
application/json
application/json
application/json
application/json
application/json
curl -X GET "https://api.trendtrack.io/v1/products/3f8aa146-6f96-46e8-9781-64db5166f9a8:7915404542236/ads"{ "requestId": "string", "product": { "id": "3f8aa146-6f96-46e8-9781-64db5166f9a8:7915404542236", "title": "string", "url": "string", "landingPage": "loopearplugs.com/products/loop-quiet-2" }, "data": [ { "id": "facebook_123456789", "collationId": "3810635369204881", "platform": "facebook", "status": "active", "createdAt": "2026-04-18T12:30:00.000Z", "firstSeenAt": "2026-04-10T00:00:00.000Z", "lastSeenAt": "2026-04-19T00:00:00.000Z", "daysRunning": 9, "media": { "type": "video", "thumbnailUrl": "https://cdn.example.com/ads/ad-1-thumb.jpg", "mediaUrl": "https://cdn.example.com/ads/ad-1.mp4" }, "advertiser": { "id": "1234567890", "name": "Example Brand", "logoUrl": "https://cdn.example.com/pages/example-brand.png", "facebookPageId": "1234567890", "liveAdsCount": 42, "reach30d": 152340, "totalReach": 842100, "countriesCount": 8, "facebookLikes": 125000, "instagramFollowers": 89000 }, "content": { "title": "Summer Sale", "body": "Up to 30% off selected products.", "transcript": "Save 30% on every order.", "callToAction": "Shop now", "landingPageUrl": "https://example.com/products/summer-sale", "landingPageDomain": "example.com", "ctaDescription": "Free shipping on orders over $50.", "ctaLinkDescription": "Shop the full collection" }, "metrics": { "reach": 152340, "aggregatedReach": 284100, "estimatedSpend": 4262, "duplicates": 4, "reachDelta1d": 1200, "reachDelta7d": 8200, "reachDelta30d": 38400 }, "audience": { "targetedCountries": [ "US", "FR" ], "mainCountry": "FR", "gender": "all", "ageMin": 18, "ageMax": 65 }, "rank": { "positionInPage": 3, "currentRank": 12, "rankDelta": -4, "improvementPct": 0.25 }, "flags": { "isEuAd": true, "isLowReach": false, "isMediaChanged": false, "hasPartnerBadge": true } } ], "pagination": { "page": 1, "limit": 25, "total": 235, "totalPages": 10 }}{ "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" ] } ] } }}{ "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" ] } ] } }}Create a product share link
Returns the public product sheet link, reusing the caller's active link for this product. The public sheet never carries EU/UK data.
Authorization
publicApiBearer Provide a Trendtrack Public API key using Authorization: Bearer <api_key>.
In: header
Path Parameters
The id returned by product search: {shopId}:{shopifyId}, or {shopId}:handle:{handle}.
Response Body
application/json
application/json
application/json
application/json
application/json
application/json
application/json
application/json
curl -X POST "https://api.trendtrack.io/v1/products/3f8aa146-6f96-46e8-9781-64db5166f9a8:7915404542236/share-links"{ "requestId": "string", "data": { "productId": "3f8aa146-6f96-46e8-9781-64db5166f9a8:7915404542236", "url": "https://app.trendtrack.io/en/share/product/abc123", "createdAt": "2019-08-24T14:15:22Z" }}{ "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" ] } ] } }}{ "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 product
The product as search returns it, plus its sheet: every photo, options, subscription plans, and estimated sales day by day over 90 days.
Authorization
publicApiBearer Provide a Trendtrack Public API key using Authorization: Bearer <api_key>.
In: header
Path Parameters
The id returned by product search: {shopId}:{shopifyId}, or {shopId}:handle:{handle}.
Response Body
application/json
application/json
application/json
application/json
application/json
application/json
application/json
application/json
curl -X GET "https://api.trendtrack.io/v1/products/3f8aa146-6f96-46e8-9781-64db5166f9a8:7915404542236"{ "requestId": "string", "data": { "id": "3f8aa146-6f96-46e8-9781-64db5166f9a8:7915404542236", "shopifyId": "7915404542236", "title": "Loop Quiet 2", "description": "string", "url": "https://loopearplugs.com/products/loop-quiet-2", "handle": "loop-quiet-2", "imageUrl": "string", "publishedAt": "string", "price": { "amount": 39.9, "currency": "EUR", "amountUsd": 43.5, "compareAtAmount": 59.9, "onSale": true, "discountPercent": 33, "isSubscription": true, "promoTypes": [ "percent-off" ] }, "reviews": { "rating": 4.7, "count": 1280 }, "bestSellerRank": { "position": 3, "percentile": 2.5 }, "optionNames": [ "Color", "Size" ], "sales": { "dailyRevenueUsd": 1200, "dailyRevenueRangeUsd": { "min": 0, "mean": 0, "max": 0 }, "monthlyRevenueUsd": 36000, "dailyUnitsSold": 30, "monthlyUnitsSold": 900 }, "ads": { "active": 12, "total": 30, "launched30d": 8, "weekOverWeekGrowth": 25, "adShare": 40, "advertisersCount": 3, "hasPartnershipAds": true, "previewUrls": [ "string" ], "activeByCountry": [ { "countryCode": "US", "activeAds": 12 } ], "sellingCountries": [ "US", "CA" ] }, "euMetrics": { "locked": true, "spendUsd": 4500, "dailySpendUsd": 150, "reach": 500000, "spendShare": 12.5, "reachByCountry": [ { "countryCode": "FR", "reach": 500000 } ] }, "weeklyHistory": [ { "from": "2019-08-24", "to": "2019-08-24", "activeAds": 0, "euDailySpendUsd": 0, "euDailyReach": 0 } ], "shop": { "id": "3f8aa146-6f96-46e8-9781-64db5166f9a8", "domain": "loopearplugs.com", "name": "string", "avatarUrl": "string", "countryCode": "BE", "currency": "EUR", "productsCount": 0, "monthlyVisits": 0, "monthlyRevenueUsd": 0, "createdAt": "2019-08-24", "categoryIds": [ 0 ] }, "detail": { "images": [ "string" ], "productType": "string", "options": [ { "name": "Color", "values": [ "Black", "White" ] } ], "sellingPlans": [ { "name": "Color", "values": [ "Black", "White" ] } ], "mediaCount": 0, "shopActiveAds": 0, "dailySales": [ { "date": "2019-08-24", "revenueUsd": 0 } ] } }}{ "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" ] } ] } }}{ "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" ] } ] } }}