Shop.app API endpoint
Returns a market snapshot derived from Shop.app search results, including price ranges, currencies, sale counts, discounts, and top shops. Limit defaults to 20 and accepts values up to 50.
/shop-app/analysisSearches Shop.app for a query and returns a derived market snapshot from the product results.
Query parameters:
query: required. Search keywords. Example: sneakers.limit: optional integer. Maximum products to analyze. Default: 20; maximum: 50.in_stock: optional boolean. Request in-stock products. Default: true.on_sale: optional boolean. Request sale products. Default: false.deep_search: optional boolean. Accepted for compatibility. Shop.app no longer offers a separate deep search mode, so this flag does not change the results. Default: false.Notable response behavior:
prices_by_currency reports min, max, average, and count for each currency present in parsed products.discounts is computed only from products with both price and original_price.top_shops ranks shops by the number of parsed products in the analyzed result set.groups_count counts Shop.app expanded product groups; its current search feed does not supply them, so it is normally 0.| Field | In the sample | Value in the sample |
|---|---|---|
| query | Has a value | “sneakers” |
| products_count | Has a value | 20 |
| groups_count | Has a value | 0 |
| shops_count | Has a value | 11 |
| currencies | Has a value | 1 entry |
| prices_by_currency | Has a value | 1 entry |
| sale_count | Has a value | 3 |
| discounts.min_percent | Has a value | 7.57 |
| discounts.max_percent | Has a value | 75 |
| discounts.average_percent | Has a value | 37.52 |
| top_shops | Has a value | 5 entries |
| sampled_product_ids | Has a value |
| Parameter | Type | Required | Default | Description | Example |
|---|---|---|---|---|---|
| query | string | Yes | Search query | sneakers | |
| limit | integer | No | 20 and supports up to 50 | Maximum products to analyze, defaults to 20 and supports up to 50 | 20 |
| in_stock | boolean | No | Request in-stock products | true | |
| on_sale | boolean | No | Request sale products | false | |
| deep_search | boolean | No | Accepted for compatibility; Shop.app no longer offers a separate deep search mode, so results are unchanged | false | |
| x-api-key (header) | string | Yes | API key required |
curl -X GET "https://api.crawlora.net/api/v1/shop-app/analysis?query=sneakers&limit=10&in_stock=true&on_sale=true&deep_search=true" \ -H "x-api-key: $CRAWLORA_API_KEY"
{
"code": 200,
"msg": "OK",
"data": {
"query": "sneakers",
"products_count": 5,
"groups_count": 0,
"shops_count": 3,
"currencies": [
"USD"
],
"prices_by_currency": [
{
"currency": "USD",
"count": 5,
"min": 40,
"max": 100,
"average": 67.5
}
],
"sale_count": 2,
"discounts": {
"min_percent": 20,
"max_percent": 50,
"average_percent": 35
},
"top_shops": [
{
"shop_id": "62696",
"shop_name": "BILLY Footwear",
"count": 2
}
],
"sampled_product_ids": [
"8075903107261",
"7093164834901"
]
}
}Request schema
No body schema
Response schema
#/definitions/shopapp.analysisResponseDoc
| Field | Type | Required | Enum | Bounds | Example | Description |
|---|---|---|---|---|---|---|
| code | integer | No | 200 | |||
| data | shopapp.AnalysisResponse | No | ||||
| data.currencies | array | No | USD,GBP | Currency codes found among the sampled products. | ||
| data.discounts | object | No | Discount percentages across sampled products that are on sale and have an original price. | |||
| data.discounts.average_percent | number | No | 24.6 | Average discount across on-sale products, as a percentage of the original price. | ||
| data.discounts.max_percent | number | No | 60 | Largest discount among on-sale products, as a percentage of the original price. | ||
| data.discounts.min_percent | number | No | 10 | Smallest discount among on-sale products, as a percentage of the original price. | ||
| data.groups_count | integer | No | 5 | Number of product groups Shop.app returned with the results. | ||
| data.prices_by_currency | array | No | Price summary for each currency found among the sampled products. | |||
| data.prices_by_currency[].average | number | No | 72.42 | Average price in this currency, rounded to two decimals. | ||
| data.prices_by_currency[].count | integer | No | 12 | Number of sampled products priced in this currency. | ||
| data.prices_by_currency[].currency | string | No | USD | Currency code of the prices. | ||
| data.prices_by_currency[].max | number | No | 149.99 | Highest price in this currency. | ||
| data.prices_by_currency[].min | number | No | 35.9 | Lowest price in this currency. | ||
| data.products_count | integer | No | 20 | Number of products sampled. | ||
| data.query | string | No | sneakers | Search query that was analyzed. | ||
| data.sale_count | integer | No | 6 | Number of sampled products that are on sale. | ||
| data.sampled_product_ids | array | No | 8075903107261,7093164834901 | Product IDs of the first sampled products, up to 10. | ||
| data.shops_count | integer | No | 8 | Number of distinct shops among the sampled products. | ||
| data.top_shops | array | No | Up to five shops with the most sampled products. | |||
| data.top_shops[].count | integer | No | 4 | Number of sampled products from this shop. | ||
| data.top_shops[].shop_id | string | No | 3961166 | Shop.app ID of the shop. | ||
| data.top_shops[].shop_name | string | No | Start Fitness | Name of the shop. | ||
| msg | string | No | OK |
| Status | Description | Schema |
|---|---|---|
| 400 | Bad Request | #/definitions/app.Response |
| 429 | Too Many Requests | #/definitions/app.Response |
| 503 | Service Unavailable | #/definitions/app.Response |
Use environment variables for secrets and keep Crawlora API keys server-side.
curl -X GET "https://api.crawlora.net/api/v1/shop-app/analysis?query=sneakers&limit=10&in_stock=true&on_sale=true&deep_search=true" \
-H "x-api-key: $CRAWLORA_API_KEY"