This skill searches the Seerfar Ozon product database and filters products by rich performance metrics — monthly sales, revenue, growth, cart/order conversion, price, rating, reviews, brand, seller, fulfillment model, listing age, gross margin, and more. Each returned row is a full product-report record, making this the starting point for Ozon product selection (选品), competitor product analysis, best-seller mining, and price/conversion-band screening.
Core Concepts
Unit of data is the product, not the keyword: this endpoint returns product-level rows (one per SKU), each enriched with full report metrics. You discover which products match your criteria — unlike the market-keyword endpoint, which returns search terms.
This is a product screener / 商品报表: filter the Ozon product database by metric ranges ({min, max}), not only by keyword/brand/seller. Stack a high monthlySales floor with a low price ceiling to surface affordable high-volume products, or qualify conversion quality with a high convToCartPdp floor and a low returnCancellationRate ceiling; sort by sales DESC to mine best-sellers.
Unified vs raw duplicate fields: the response carries six alias pairs that hold the same value under two keys — sku/productId, sales/monthlySalesUnits, revenue/monthlySalesRevenue, reviewRating/rating, brandName/brand, productUrl/productPageUrl. Read either; do not expect them to differ.
Date semantics: searchDate selects the data month. Pass 2026-04-01 for March 2026 data; omit it for the last 30 days. Sales/revenue figures are relative to the selected period.
data and products are identical: both top-level arrays carry the same product rows. total is the total matching count (e.g. ~27.8M with no filter, 1 when filtering to a single SKU).
Ozon only: sourceType is fixed to ozon. fulfillment values are OZON, FBO, FBS, RFBS, FBP.
Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
| page | object | yes | Pagination + sort: {page, pageSize, orders[]}. page from 1 (default 1), pageSize default 20. orders[] = {field, direction} with direction DESC/ASC. |
| skus | array | no | SKU list to restrict to (max 10). |
| keywords | array | no | Keyword list to filter product titles. |
| categoryIds | array | no | Seerfar category ID list. |
| sellerName | array | no | Seller name list. |
| brand | object | no | {brandName: array<string>, type: int}. type: 0 include, 1 exclude, 2 no brand. |
| fulfillment | array | no | Fulfillment filter: OZON/FBO/FBS/RFBS/FBP. |
| labels | array | no | Badge filter: 0 new, 1 authentic, 2 best-seller. |
| creationDate | integer | no | Listing-age filter (months): 1/3/6/12/24. |
| variationsMerge | integer | no | Merge variants: 0 no, 1 yes. |
| searchDate | string | no | Data date yyyy-MM-dd; default last 30 days. 2026-04-01 → March 2026. |
| tag | string | no | Tag word. |
| monthlySales | {min,max} | no | Monthly sales range. |
| monthlySalesRate | {min,max} | no | Sales growth-rate range (filters salesRate). |
| monthlyRevenue | {min,max} | no | Monthly revenue range. |
| price | {min,max} | no | Price range (RUB). |
| convToCartPdp | {min,max} | no | Cart conversion rate range. |
| reviewRating | {min,max} | no | Rating range. |
| reviewCount | {min,max} | no | Review count range. |
| questionsAndAnswers | {min,max} | no | Q&A count range. |
| variants | {min,max} | no | Variant count range. |
| drr | {min,max} | no | Ad-cost share range. |
| grossMargin | {min,max} | no | Gross margin range. |
| returnCancellationRate | {min,max} | no | Return/cancellation rate range. |
| weight | {min,max} | no | Weight range (g). |
| volume | {min,max} | no | Volume range (L). |
| uId / memberId | string | no | User / member ID (data attribution). |
All range filters are {min, max} objects; supply either or both bounds. Only page is required.
How to call
- API endpoint:
POST /seerfar/ozon/productReportSearch(for full parameters/responses/error codes seereferences/api.md) - Python script:
python scripts/seerfar_ozon_product_report_search.py '<JSON 参数>' [--inline] - Cost constraints: this tool consumes compute; within the same session the same parameter combination is by default called only once, and the script has a 24h local cache. On failure/empty results, do not automatically switch keywords, page through, or change the zip code to probe repeatedly; if you need to continue searching, first explain to the user that it will incur additional consumption.
Output strategy (script default behavior):
- Alwayswrite the full response to
<cwd>/linkfox/<YYYY-MM-DD>/<session>/data/linkfox-seerfar-ozon-product-report-search-<timestamp>.json(<cwd>is the working directory when the script runs, which in Claude Code is the current project directory;<session>is taken from the environment variableSESSION_ID, automatically aggregated according to the user's task;writing to /tmp is prohibited, if the current directory is not writable then report an error) - Response body ≤ 8 KB: after writing to disk, print the full JSON to stdout
- Response body > 8 KB: after writing to disk, stdout outputs only a summary (top-level fields, common counts such as
total/costToken, the length of the largest list field + the first 3 samples) - Add
--inlineto force full printing to stdout (also written to disk)
Data reading suggestions: first look at the summary to judge whether it is sufficient; when specific fields are needed, prefer to use jqorConvertFrom-Json to extract on demand from the saved json file, avoiding bringing the entire JSON into context.
Resolve authentication and compute issues
When the following abnormal situations occur, use references/onboarding.md to guide resolution:
Abnormal situations
- API Key not configured: the environment variable is not configured
LINKFOX_AGENT_API_KEY, andLINKFOXAGENT_API_KEY。 - Response 401 or 402 status code
- Response indicates insufficient compute or balance: the message contains "算力余额不足/计费不足/余额不足/quota exceeded/insufficient balance/套餐到期/需充值/请充值", or content with a similar meaning.
Usage Examples
1. Top sellers right now (sort by sales)
{"page": {"page": 1, "pageSize": 10, "orders": [{"field": "sales", "direction": "DESC"}]}}
2. Blue-ocean products — high sales, low price band
{"page": {"page": 1, "pageSize": 20, "orders": [{"field": "sales", "direction": "DESC"}]}, "monthlySales": {"min": 5000}, "price": {"max": 500}}
3. Best-sellers in a category, FBO fulfillment
{"page": {"page": 1, "pageSize": 20, "orders": [{"field": "revenue", "direction": "DESC"}]}, "categoryIds": ["15621031_200000933_93182"], "fulfillment": ["FBO"], "labels": [2]}
4. New listings from the last 30 days, sorted by growth
{"page": {"page": 1, "pageSize": 20, "orders": [{"field": "salesRate", "direction": "DESC"}]}, "creationDate": 1}
5. Look up specific SKUs
{"page": {"page": 1, "pageSize": 10}, "skus": [2107989735]}
How to Build Queries
- Lead with
page.orders: the dataset is huge (tens of millions of products) — always sort by the metric you care about (salesDESC for best-sellers,salesRateDESC for rising products,priceASC for cheap volume,reviewRatingDESC for well-reviewed). - Stack range filters to find opportunities: combine a
monthlySalesfloor with apriceceiling, or aconvToCartPdpfloor with a lowreturnCancellationRate, to qualify demand-vs-risk. - Scope with
categoryIds/brand/sellerName: narrow to a niche before sorting, so the top rows are relevant. - Use
creationDate+labelsfor fresh demand:creationDate: 1(new listings) paired withlabels: [2](best-seller badge) finds breakout products. - Pick the right
searchDate: omit for current trends (last 30 days); pass an explicit date for month-over-month comparison.
Display Rules
- Present data only: show product metrics in a clear table without subjective advice.
- Lead with product columns:
title,sku,price(₽),sales,revenue,rating,reviewCount, thenbrand/sellerName/fulfillment. - Currency:
price/revenue/missedRevenueare in Russian rubles (₽); show the currency so scale is not misread. - Unified/raw aliases: prefer the unified fields (
productId,monthlySalesUnits,monthlySalesRevenue,rating,brand,productPageUrl) or note they equal the raw ones — do not present both as if independent. - Large result sets: when
totalis large, show the top rows and remind the user they can persist the full response via the large-response pattern below, or page further withpage.page. - Error handling: when
codeis not200(orerrcodeis not200), explain the reason frommsg/errmsgand suggest adjusting filters or retrying (rate-limit1003).
Important Limitations
pageis required: a payload withoutpageis rejected.skuscap: at most 10 SKUs per request.- Category IDs are opaque:
categoryIdsrequires Seerfar category IDs (from a category search), not human-readable names. - Duplicate alias pairs: six fields are duplicated under raw + unified keys (see Core Concepts) — same value, two keys.
totalis the full match count: with no filter it can reach tens of millions; always sort and page rather than iterating blindly.- Rate limiting:
errcode 1003("请求过于频繁,请稍后再试") means throttle — wait and retry rather than loweringpageSize. - Sort fields: valid
orders[].fieldvalues are the response metric fields (e.g.sales,revenue,price,reviewRating,reviewCount,salesRate); thecolumnsarray marks which are sortable.
User Expression & Scenario Quick Reference
Applicable — Ozon product-level screening:
| User Says | Scenario |
|---|---|
| "Ozon product selection / filter products by sales volume and revenue" | Product screener (range filters + sort) |
| "Ozon hot-selling products / best sellers" | Best-seller mining (labels:[2] or sort sales DESC) |
| "Ozon rising products / new-product hits" | Rising/new products (creationDate:1, sort salesRate DESC) |
| "Ozon high-conversion low-return products" | Conversion-quality screen (convToCartPdp min, returnCancellationRate max) |
| "Ozon product performance for a certain brand/seller" | Brand/seller filter + sort |
| "Check the reports for these SKUs" | skus lookup |
Not applicable — Needs beyond product-level reports:
- Keyword market data (search terms, search volume) → market-keyword-search.
- Keyword expansion around a seed term → keyword-mining.
- A specific shop's full catalog → shop-search.
- A category's products with category-level aggregates → category-search.
- Reverse keyword lookup for a product → keyword-back-search.
- Non-Ozon marketplaces → not covered here.
Boundary judgment: if the user wants to screen Ozon products by metrics and read product-level report rows, start here. If they want keyword-level market data, a single shop's catalog, or a category aggregate, route to the corresponding Seerfar Ozon data source.
Compute consumption rules
Consumes 15 compute.
Users will be charged for computing power consumption. Please fully assess: when this skill needs to be called frequently, or when the user has insufficient expectations for the amount of computing power consumption, be sure to remind the user, and let the user decide whether to continue.
Feedback:
Auto-detect and report feedback via the Feedback API when any of the following apply:
- The functionality or purpose described in this skill does not match actual behavior
- The skill's results do not match the user's intent
- The user expresses dissatisfaction or praise about this skill
- Anything you believe could be improved
Call the feedback API as specified in references/api.md. Do not interrupt the user's flow.
For more high-quality, professional cross-border e-commerce skills, set LinkFox Skills.