Shops

Query shops

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

post/v1/shops/query

Request

  • Base URL: https://api.trendtrack.io (the document declares no server; this is the origin it was published from)
  • URL: https://api.trendtrack.io/v1/shops/query
  • Auth: HTTP bearer

Request body

searchstring

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'domain' | 'productName' | 'shopContains'

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'relevance' | 'monthlyVisits' | 'activeAds' | 'growth30d' | 'productsCount' | 'createdAt' | 'tiktokFollowers' | 'tiktokActiveAds' | 'tiktokTotalPosts' | 'tiktokAvgActiveAds7d' | 'tiktokAvgActiveAds30d' | 'estMonthlySales' | 'unitsSold'

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'asc' | 'desc'
offsetnumber
limitnumber
categoryIdsnumber[]

Optional category ids used by the current shop discovery index.

minEstimatedRevenuenumber

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

maxEstimatedRevenuenumber

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

minMonthlySalesnumber

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

maxMonthlySalesnumber

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

minUnitsSoldnumber

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

maxUnitsSoldnumber

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

minMonthlyVisitsnumber
maxMonthlyVisitsnumber
minProductsCountnumber
maxProductsCountnumber
createdAfterstring date
createdBeforestring date
mainMarketCountriesstring[]

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

marketCountriesstring[]

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

excludeMarketCountriesstring[]
minBestSellerPricenumber
maxBestSellerPricenumber
minActiveAdsnumber

Optional minimum active ads filter. The metric follows adsTimePeriod.

maxActiveAdsnumber

Optional maximum active ads filter. The metric follows adsTimePeriod.

adsTimePeriod'last24h' | 'last7d' | 'last30d'

Relative ad first-seen time window. When createdAfter is omitted, this is converted to an internal first-seen lower bound at the UTC day boundary for the selected period. It also selects the ads metric period used by minAds/maxAds.

hasTikTokboolean

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

minTikTokFollowersnumber
maxTikTokFollowersnumber
minTikTokActiveAdsnumber
maxTikTokActiveAdsnumber
minTikTokTotalPostsnumber
maxTikTokTotalPostsnumber
isShopifyPlusboolean
creationCountriesstring[]
excludeCreationCountriesstring[]
displayInTrendingboolean

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

themeIdsstring[]

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

pixelIdsstring[]

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

excludePixelIdsstring[]

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

shopifyAppIdsstring[]

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

excludeShopifyAppIdsstring[]

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

minTrustpilotRatingnumber
maxTrustpilotRatingnumber
minTrustpilotReviewCountnumber
maxTrustpilotReviewCountnumber
languagesstring[]
currenciesstring[]
dtcRegion'all' | 'us' | 'eu'

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

Example request

{
  "search": "https://www.allbirds.com/products",
  "limit": 32,
  "categoryIds": [
    166,
    417
  ],
  "minEstimatedRevenue": 10000,
  "maxEstimatedRevenue": 500000,
  "minMonthlySales": 10000,
  "maxMonthlySales": 500000,
  "minUnitsSold": 500,
  "maxUnitsSold": 10000,
  "minMonthlyVisits": 5000,
  "maxMonthlyVisits": 500000,
  "minProductsCount": 10,
  "maxProductsCount": 500,
  "createdAfter": "2024-01-01",
  "createdBefore": "2024-12-31",
  "mainMarketCountries": [
    "US",
    "CA"
  ],
  "marketCountries": [
    "CA",
    "GB"
  ],
  "excludeMarketCountries": [
    "DE"
  ],
  "minBestSellerPrice": 20,
  "maxBestSellerPrice": 150,
  "minActiveAds": 5,
  "maxActiveAds": 50,
  "hasTikTok": true,
  "minTikTokFollowers": 10000,
  "maxTikTokFollowers": 500000,
  "minTikTokActiveAds": 5,
  "maxTikTokActiveAds": 50,
  "minTikTokTotalPosts": 20,
  "maxTikTokTotalPosts": 1000,
  "isShopifyPlus": true,
  "trafficGrowth": [
    {
      "period": "last30d",
      "comparison": "greater",
      "value": 20
    }
  ],
  "adsGrowth": [
    {
      "period": "last7d",
      "comparison": "greater",
      "value": 15
    }
  ],
  "pageReachGrowth": [
    {
      "period": "last30d",
      "comparison": "greater",
      "value": 40
    }
  ],
  "adReachGrowth": [
    {
      "period": "last7d",
      "comparison": "lower",
      "value": 5
    }
  ],
  "creationCountries": [
    "FR",
    "DE"
  ],
  "excludeCreationCountries": [
    "CN"
  ],
  "displayInTrending": true,
  "themeIds": [
    "29bcbf64-9679-439a-9f07-7ad230b6ca16"
  ],
  "pixelIds": [
    "ffe94cf7-e81d-5c43-9253-359117b1a544"
  ],
  "excludePixelIds": [
    "fb3d434c-8fb6-5687-ab39-82c588bdbefa"
  ],
  "shopifyAppIds": [
    "41c143a7-0000-4000-8000-000000000000",
    "52d254b8-0000-4000-8000-000000000000"
  ],
  "excludeShopifyAppIds": [
    "63e365c9-0000-4000-8000-000000000000"
  ],
  "minTrustpilotRating": 4.2,
  "maxTrustpilotRating": 4.9,
  "minTrustpilotReviewCount": 100,
  "maxTrustpilotReviewCount": 5000,
  "languages": [
    "en",
    "fr"
  ],
  "currencies": [
    "USD",
    "EUR"
  ]
}

Response

Paginated advanced shops query response. The response also includes the X-Request-Id header.

requestIdstring required

Request identifier mirrored in the X-Request-Id response header.

Example response

{
  "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": {
        "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"
        },
        "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"
        }
      ]
    }
  ],
  "pagination": {
    "limit": 32,
    "total": 128
  }
}

Changes

No recorded changes to this operation across all 1 revision of this API.