# Dynasort Documentation, full text > The complete text of every page on docs.dynasort.io in one file, in the same order as https://docs.dynasort.io/llms.txt. Dynasort is the Shopify app for automated merchandising: it ranks collections, product options and swatches, search results and product recommendations from weighted rules called recipes, built on the store's own sales, inventory, conversion and review data. Index of pages: https://docs.dynasort.io/llms.txt Every FAQ in one file: https://docs.dynasort.io/llms-faq.txt Product site and entity facts: https://dynasort.io/llms.txt Install: https://apps.shopify.com/dynasort Support: hello@dynasort.io --- # How Dynasort Works URL: https://docs.dynasort.io/how-dynasort-works/ Understand Dynasort’s workflow and how recipes and attributes drive automated collection merchandising. Dynasort is a smart collection merchandising tool for Shopify merchants, designed to automate and optimize how products are arranged within collections. ## How It Works At its core, Dynasort allows merchants to create **Recipes**, which are customized sets of rules that determine product rankings. Each Recipe assigns weights to specific [Attributes](https://docs.dynasort.io/attributes/)—such as price, sales performance, inventory levels, or new arrivals—to score and rank products dynamically. ## The Dynasort Workflow 1. Sync store data: Dynasort continuously updates product and collection data using Shopify’s APIs and webhooks. 2. Define attributes: Merchants set up attributes that define product importance, like “Best Sellers” or “New Arrivals.” 3. Build a recipe: Merchants create Recipes that assign weight values to these attributes. 4. Sort and apply: Dynasort calculates total scores for each product in a collection, ranks them, and updates the collection order automatically. 5. Optional handling: Move out-of-stock products to the bottom and set tie breakers based on sales, inventory, or price. 6. Automated updates: Sorting runs on a schedule based on your plan (typically every 10–60 minutes). 7. Seamless integration: When a collection is managed by Dynasort, it overrides Shopify’s default sorting. If disabled, Shopify’s native sorting resumes. ## Why Use Dynasort? - Data-driven decisions: Collections stay optimized based on real-time store metrics. - Saves time: Eliminates manual product arrangement. - Boosts sales: Surfaces high-performing products to increase conversions. - Customizable and scalable: Flexible sorting logic for small or large catalogs. ## Frequently asked questions **Q: What does Dynasort do?** Dynasort is a Shopify app that automates collection merchandising. It scores every product in a collection against a recipe, a set of weighted attributes such as sales, conversion rate, inventory and price, then pushes the ranked order to Shopify and keeps it updated automatically. **Q: What is a recipe in Dynasort?** A recipe is a named set of ranking rules. Each rule is an attribute with a point weight, for example 30 points for best sellers and 10 points for new arrivals. Dynasort adds up the points each product earns and sorts the collection by total score. See Recipes. **Q: How often does Dynasort re-sort collections?** Every 10 to 60 minutes depending on plan: every 60 minutes on Demo, 30 on Basic, 20 on Pro and 10 on Enterprise. Sorting runs on a schedule, so a data change shows up in the collection order on the next run. **Q: What happens to Shopify's own sort order when Dynasort manages a collection?** While a collection is enabled in Dynasort, its ranked order replaces Shopify's default sorting. Disable the collection and Shopify's native sorting resumes, using the revert sort order you chose such as Best selling or Manual. **Q: Does Dynasort need shopper data before it can sort?** No. The moment you enable a collection, Dynasort sorts it on catalog signals it already has: stock status, price, inventory level, tags, sales and more. Behaviour signals such as conversion rate and add-to-cart rate improve as your store collects data. See What to Expect After Install. **Q: Which parts of a Shopify store can Dynasort rank?** Collections, product options and swatches, storefront search results, product recommendation rows and post-purchase offers on the order confirmation page. All of them are driven by recipes, so one ranking logic can run everywhere. --- # Quick Start Guide URL: https://docs.dynasort.io/quick-start-guide/ What happens when you install Dynasort, and how the Guided Setup gets your store sorting in minutes. When you install Dynasort, the app walks you through setup itself. Here is what to expect, and what each step does. ## 1) Tell us what you want to improve Right after you pick a plan, Dynasort asks which benefits matter to you: better merchandised collections, in-stock options and swatches, conversion tracking, search results, or upsells. Tap all that apply. Your answers become a personal setup plan; nothing is locked in, and every feature stays available either way. ## 2) While your store syncs Dynasort syncs your collections, products, and recent orders; the screen shows live progress and a time estimate. While you wait you can read the short Academy lessons (about two minutes each), or click "Email me when complete" and we'll email you the moment your store is ready. ## 3) Your setup plan When syncing completes, Dynasort shows your setup plan and drops you on the dashboard, where the **Guided Setup** card tracks every task with live status: not started, in progress, or done. Each task expands into concrete steps that link to the right screen, and each of those screens explains what to do there. The first task is usually getting a collection sorting: - **Review your sorting recipes.** Recipes define how products get ranked. The defaults work well to start. - **Enable a collection.** Open a collection, choose a recipe, switch it on, and save. - **Turn on processing.** The master switch on the [Settings](https://docs.dynasort.io/settings/) page; nothing sorts until it's on. Depending on your plan, the guide also walks you through [search re-ranking](https://docs.dynasort.io/search-re-ranking/), [product recommendations](https://docs.dynasort.io/product-recommendations/), [post-purchase offers](https://docs.dynasort.io/post-purchase-recommendations/), and product option sorting. Tasks complete automatically as Dynasort sees each surface go live on your storefront. ## You're done Dynasort re-sorts your enabled collections automatically every 10–60 minutes, depending on your plan, and [Insights](https://docs.dynasort.io/insights/) starts filling in after about a day of processing. ## Want a hand? - Use the in-app chat any time; a human reads it. - [Book a free training session](https://cal.com/dynasort/training-session) and we'll walk through setup together. ## Want to customize further? - Edit your [Recipes](https://docs.dynasort.io/recipes/) to adjust ranking. - Modify [Attributes](https://docs.dynasort.io/attributes/) to fine-tune sorting criteria. - Try [Managed Collections](https://docs.dynasort.io/managed-collections/) for dynamic product selection. ## Frequently asked questions **Q: How long does Dynasort setup take?** Minutes. After you pick a plan, Dynasort asks what you want to improve, syncs your collections, products and recent orders with a live progress bar, and then shows a Guided Setup card that tracks each task until your first collection is sorting. **Q: What are the three steps to get a collection sorting?** Review the default sorting recipes, open a collection and enable it with a recipe, then switch processing on using the master switch on the Settings page. Nothing sorts until that switch is on. **Q: Why is my collection not sorting after I enabled it?** The most common cause is the processing master switch on the Settings page being off. Also check that the collection has a recipe assigned. Once both are set, the collection is sorted on the next scheduled run, which is within 10 to 60 minutes depending on plan. **Q: Do I have to wait in the app while my store syncs?** No. Click 'Email me when complete' and Dynasort emails you the moment the sync finishes. You can also read the short Academy lessons, about two minutes each, while you wait. **Q: When will Insights show data?** Insights starts filling in after about a day of processing. Dynasort aggregates each day's shopper activity in an overnight run, so full analytics appear after the first night since install. **Q: Can someone help me set up Dynasort?** Yes. The in-app chat is read by a person, and you can book a free training session at cal.com/dynasort/training-session to walk through setup together. --- # What to Expect After Install URL: https://docs.dynasort.io/what-to-expect/ How Dynasort behaves in your first hours and days, from immediate sorting to overnight analytics. Dynasort starts working the moment you enable your first collection. This page walks through what you will see in the first hours and days, so you know what is normal. ## Sorting starts immediately > **You do not wait for data to start sorting** > > As soon as you enable a collection, Dynasort orders it using catalog signals it already knows: in stock versus out of stock, price, inventory level, product tags, sales, and more. There is no warm-up period for this. Shopper-behavior signals (conversion rate, add-to-cart rate, bounce and exit rate, back-in-stock, most-clicked) get better as your store collects data, but Dynasort is never sitting idle while it waits. Your collections are already being sorted. ## While Dynasort is collecting data Right after install, before any shopper data has been processed, your dashboard shows a **Data collection** panel instead of empty charts. It tells you, at a glance: - Whether sorting is active. - How many products are in your catalog and how many collections are sorting. - A simple "what's happening" guide: sorting now on catalog signals, collecting shopper events, overnight aggregation, then full analytics. - A running count of shopper events collected so far. This updates every few hours, not in real time. ## When full analytics appear Dynasort processes the day's shopper activity in an overnight run (around 1:00 AM US Eastern time). After the first run has completed since you installed, the dashboard switches from the data-collection panel to the full analytics layout: the performance timeline, ranked panels, and conversion summaries. > **Empty charts right after the first night are normal** > > If your store is brand new or has had little storefront traffic, you may see the full analytics layout with empty states and a short banner. That is expected. It means everything is working, there is simply no shopper data to plot yet. As real traffic comes in, the charts fill automatically. ## Quick summary | When | What is happening | |------|-------------------| | The moment you enable a collection | Sorting is live on catalog signals | | First hours | Shopper events are being collected; dashboard shows the data-collection panel | | After the first overnight run | Full analytics layout appears | | As traffic accumulates | Behavior-based attributes and charts get richer | ## Frequently asked questions **Q: Does Dynasort start sorting immediately after install?** Yes. As soon as you enable a collection, Dynasort orders it using catalog signals it already knows: in stock versus out of stock, price, inventory level, product tags and sales. There is no warm-up period. **Q: What is the Data collection panel on the dashboard?** It is the dashboard view shown before any shopper data has been processed. It confirms whether sorting is active, how many products and collections are in play, and a running count of shopper events collected so far, updated every few hours. **Q: When do full analytics appear in Dynasort?** After the first overnight run since you installed. Dynasort processes each day's shopper activity around 1:00 AM US Eastern time, and the dashboard then switches to the full layout with the performance timeline, ranked panels and conversion summaries. **Q: Why are my charts empty after the first night?** A brand new store or one with little storefront traffic has no shopper data to plot yet. The empty states mean everything is working. Charts fill automatically as real traffic comes in. **Q: Which attributes depend on collected shopper data?** Conversion rate, add-to-cart rate, bounce rate, exit rate, back in stock and most clicked products get better as your store collects events. Catalog attributes such as price, inventory, tags and sales work from day one. --- # Plans and Billing URL: https://docs.dynasort.io/plans-and-billing/ What each Dynasort plan includes, from the free Demo plan to Enterprise, and how trials, upgrades and billing work. Dynasort has a free plan and three paid plans. Every plan ranks all four surfaces: collections, product options, search results and recommendations. Plans differ in capacity and speed, never in which features you get. ## The plans at a glance | | Demo | Basic | Pro | Enterprise | |---|---|---|---|---| | Price | Free | $99/mo | $249/mo | $499/mo | | Free trial | Not needed | 30 days | 30 days | 30 days | | Sorted collections | 2 | 25 | 100 | 1,000 | | Managed collections | 2 | 10 | 25 | 100 | | Products with sorted options | 2 | 50 | 200 | 5,000 | | Recipes | 10 | 20 | 50 | 250 | | Collections re-sort every | 60 min | 30 min | 20 min | 10 min | | Serves per month (search, recommendations, post-purchase) | 10,000 | 100,000 | 1,000,000 | Unlimited | | Serving analytics window | 7 days | 7 days | 30 days | 365 days, custom ranges | | Custom placements | 1 | 2 | 5 | 5 | | Customers Also Bought recipes | No | Yes | Yes | Yes | | Mobile vs desktop analytics | No | No | Yes | Yes | | Connector API | No | No | Yes | Yes | | Collection insights | 365 days | 365 days | 365 days | 365 days | | A/B testing | Yes | Yes | Yes | Yes | Prices are in USD and billed through Shopify every 30 days. There are no usage fees, per-order fees or overage charges. ## The Demo plan The Demo plan is free for as long as you want it. It is the right fit for a small catalog, or for trying Dynasort on a couple of collections before you commit. It runs the same ranking engine, the same recipes and the same analytics as the paid plans, with lower limits. If you were on the Demo plan when it was briefly retired in mid 2026, nothing changes for you: your plan, your limits and your price carry on. ## What a serve is A serve is one delivery of Dynasort-ranked results to a shopper: a search results page, a recommendations row, or a post-purchase offer. Collection sorting is not counted; it is covered by your collection limit and re-sort schedule. Serving allowances reset on the first of each calendar month (UTC). If you go over, nothing switches off. Dynasort emails you once a month with an upgrade suggestion, and the Plans page shows a usage meter. ## Free trials Every paid plan starts with a 30-day free trial. You pay nothing today; Shopify charges you only after the trial ends. Uninstall at any point before that and there is no charge. If you upgrade during a trial, the remaining trial days carry over to the new plan. ## Changing plans Open **Plans** in the app and choose a plan. Upgrades take effect immediately. Downgrades take effect immediately too, so if you are above the lower plan's limits you will be asked to trim collections or recipes before they process again. Moving between plans never deletes anything: recipes, collection settings, pins and analytics all stay in place. ## Cancelling Uninstall the app from your Shopify admin. Billing runs through Shopify and stops with your Shopify billing cycle. There are no cancellation steps on our side. If you reinstall later, Dynasort asks you to pick a plan again. You can choose the Demo plan or start a fresh trial on a paid plan. ## Frequently asked questions **Q: How much does Dynasort cost?** Demo is free. Basic is $99 per month, Pro $249 and Enterprise $499, in USD, billed through Shopify every 30 days. There are no usage fees, per-order fees or overage charges. **Q: Is there a free plan?** Yes. The Demo plan is free for as long as you want it. It runs the same ranking engine, recipes and analytics as the paid plans, with 2 sorted collections, 2 managed collections, 10 recipes and a 60-minute re-sort interval. **Q: Is there a free trial?** Every paid plan starts with a 30-day free trial. Shopify charges you only after the trial ends, and uninstalling before then costs nothing. If you upgrade during a trial, the remaining trial days carry over. **Q: What is a serve?** One delivery of Dynasort-ranked results to a shopper: a search results page, a recommendations row or a post-purchase offer. Collection sorting is not counted. Monthly allowances are 10,000 on Demo, 100,000 on Basic, 1,000,000 on Pro and unlimited on Enterprise, resetting on the first of each month (UTC). **Q: What happens if I exceed my monthly serves?** Nothing switches off. Dynasort emails you once a month with an upgrade suggestion and the Plans page shows a usage meter. **Q: Do the plans differ in features?** Mostly in limits and re-sort speed. Every plan ranks collections, product options, search and recommendations and includes A/B testing. The exceptions are the Connector API and mobile-versus-desktop analytics, which need Pro or Enterprise, and Customers Also Bought recipes, which need a paid plan. **Q: How do I cancel Dynasort?** Uninstall the app from your Shopify admin. Billing runs through Shopify and stops with your Shopify billing cycle; there are no cancellation steps on Dynasort's side. **Q: What happens to my settings when I change plans?** Nothing is deleted. Recipes, collection settings, pins and analytics stay in place. Upgrades and downgrades take effect immediately; if a downgrade puts you above the lower plan's limits, you are asked to trim collections or recipes before they process again. --- # Collection Sorting URL: https://docs.dynasort.io/collection-sorting/ Learn how Dynasort ranks products using recipes, boosts, and pinning. Collection sorting (collection merchandising) is the core function of Dynasort. Instead of relying on Shopify’s default sorting options, Dynasort lets you automate and customize rankings using Recipes, Boost, and Pinning. ## How Collection Sorting Works 1. Dynasort syncs collection data from Shopify. 2. Products are ranked based on weighted Attributes in a Recipe. 3. Boost adjustments add additional ranking points across all collections. 4. Pinning locks specific products to fixed positions within a collection. 5. The optimized order is pushed to Shopify. 6. Sorting refreshes every 10–60 minutes, depending on your plan. ## Recipes: The Foundation of Collection Sorting Recipes define how products are ranked. You select Attributes (e.g. Best Sellers, Inventory Levels, Price) and assign weights. Example: - “Best Sellers” weight: 30 points - “Price over $100” weight: 20 points - “New Arrivals” weight: 10 points Each product’s total score determines its ranking. ## Boost: Enhancing Product Visibility Boost is a product-specific ranking adjustment that applies across all collections. When to use Boost: - Highlighting high-margin or promotional products - Pushing seasonal products across multiple collections - Keeping flagship items visible storewide ## Pinning: Locking Product Positions Pinning is collection-specific and fixes products to a certain position. Other products adjust around pinned items when Dynasort updates rankings. When to use Pinning: - Keeping key products in specific spots - Ensuring brand/category balance - Preserving manual merchandising decisions alongside automation ## Collection Sorting vs. Managed Collections Collection Sorting ranks products already in Shopify collections. [Managed Collections](https://docs.dynasort.io/managed-collections/) can also choose which products belong in a collection based on conditions. ## Frequently asked questions **Q: How does Dynasort collection sorting work?** Dynasort syncs the collection from Shopify, scores each product with the weighted attributes in the assigned recipe, applies any Boost points and pinned positions, and pushes the resulting order to Shopify. The cycle repeats every 10 to 60 minutes depending on plan. **Q: What is the difference between Boost and Pinning?** Boost adds ranking points to a product in every collection it appears in, and the value can be negative to demote it store-wide. Pinning locks a product to a fixed position in one specific collection while Dynasort ranks everything else around it. **Q: Does Dynasort replace Shopify's default collection sorting?** Yes, while a collection is enabled. Dynasort writes its ranked order to Shopify so shoppers see it on the storefront. Disable the collection and it reverts to the sort order you chose, such as Best selling. **Q: What is the difference between Collection Sorting and Managed Collections?** Collection Sorting ranks the products already in a Shopify collection. Managed Collections also decide which products belong in the collection, using conditions such as price, tags, stock or sales, and can then rank them with a recipe. **Q: Can a collection use more than one recipe?** One recipe is applied at a time. To compare two recipes on the same collection, run an A/B test. To alternate between recipes and Shopify sort orders on a schedule, use Sort Rotation. **Q: Do I need to edit my theme for collection sorting?** No. Dynasort applies the order through Shopify's own APIs, so there are no theme changes and no storefront scripts for collection sorting. --- # Boost URL: https://docs.dynasort.io/collection-sorting/boost/ Boost gives a product extra ranking points in every collection it appears in, raising its visibility store-wide. ## Boost Boost is a ranking adjustment feature that allows merchants to increase the visibility of specific products across **all** collections. By assigning a **Boost value**, products receive additional ranking points in every collection they appear in, helping them rise in prominence. ### How Boost Works - Global Impact: Unlike [collection-specific pinning](https://docs.dynasort.io/collection-sorting/product-pinning/), Boost applies across all collections where the product is present. - Point-Based Adjustment: Boosted products receive additional ranking points, influencing their position based on Recipe calculations. Note, these can also be negative values to globally demote products if you wish. - Flexible Control: Merchants can increase or decrease Boost values as needed to prioritize key products. ### When to Use Boost - Highlight Featured Products – Keep best-sellers or flagship items near the top. - Promote Seasonal or Limited-Time Offers – Increase visibility of time-sensitive products. - Push High-Margin Items – Prioritize products that generate the most profit. ### Setting a Boost Value - Navigate to a collection where the product is present. - Search for the product you want to boost. - Assign a Boost value (e.g., +10 points). - Save changes, and Dynasort will apply the boost during the next ranking update. ## Frequently asked questions **Q: What does Boost do in Dynasort?** Boost adds a fixed number of ranking points to one product in every collection it appears in. The points are added on top of the recipe score, so a boosted product rises store-wide without changing any recipe. **Q: Can a Boost value be negative?** Yes. A negative Boost value removes points and pushes the product down in every collection, which is the simplest way to demote a product globally. **Q: How is Boost different from pinning a product?** Boost is global and point-based, so the product still competes on score and its position can vary by collection. Pinning fixes an exact position in one collection only. **Q: When does a Boost take effect?** On the next ranking update for each collection, which happens within 10 to 60 minutes depending on plan. Boost applies in collections whose recipe has the 'Use boost' option enabled. --- # Product Pinning URL: https://docs.dynasort.io/collection-sorting/product-pinning/ Pin a product to a fixed position in one collection while Dynasort ranks everything else around it. ## Product Pinning Product Pinning allows merchants to **fix** specific products to designated positions within a collection. Unlike Boost, which applies ranking adjustments globally, Pinning ensures a product stays in a set position in a specific collection, with the algorithm adjusting other product placements around it. #### How Product Pinning Works - Collection-Specific: A pinned product remains in its designated position in that collection only. - Overrides Algorithmic Sorting: The algorithm fills in other positions around pinned products. - Consistent Placement: Each time Dynasort updates the collection, the pinned product remains locked in place. #### When to Use Pinning - Feature Key Products – Ensure top-selling or strategic items always appear in prominent positions. - Maintain Brand or Category Balance – Control product distribution within a collection. - Combine Manual & Automated Merchandising – Get the best of both worlds with fixed placements and dynamic ranking. #### How to Pin a Product - Navigate to the Collections tab. - Select the collection where you want to pin a product. - Locate the product and click the empty pin icon to activate pinning. - Use the drag-and-drop interface to move the product to the desired position. - Click Save, and Dynasort will maintain this placement during future updates. ## Frequently asked questions **Q: What does product pinning do?** Pinning locks a product to a chosen position in one collection. Every time Dynasort re-sorts that collection, the pinned product stays in place and the algorithm ranks all other products around it. **Q: Does a pin apply to every collection the product is in?** No. Pins are collection-specific. To raise a product everywhere, use Boost instead. **Q: How do I pin a product in Dynasort?** Open the Collections tab, select the collection, click the empty pin icon on the product, drag it to the position you want and click Save. Dynasort keeps that placement on every future update. **Q: Do pins survive automatic re-sorts and sort rotation?** Pins survive every recipe re-sort. During a Sort Rotation, pins are only honoured on Dynasort recipe steps, because Shopify's own sort orders do not support pinned products. --- # Push Rank to Metafields URL: https://docs.dynasort.io/collection-sorting/push-rank-meta/ Publish each product's Dynasort rank position, score, and percentile as Shopify metafields so themes, apps, and reports can read them. Dynasort can publish each product's rank — position, score, and percentile — as Shopify product metafields. Once enabled, these values are available anywhere Shopify metafields are: theme Liquid, the Storefront API, Flow conditions, third-party apps, and your own reports. Use this when you want Dynasort's ranking to drive something *outside* of collection sort order — a "Top 10" badge in your theme, a filter in a search app, a feed for a recommendation tool, or an export for analysis. ## What gets published For each opted-in recipe, Dynasort writes three metafields per product, all in the `dynasort` namespace: | Metafield | What it is | | --- | --- | | `rank_position` | The product's 1-indexed position in the global ranking (1 = top). | | `rank_score` | The raw numeric score the recipe produced. Higher = better. | | `rank_percentile` | The product's percentile among all ranked products (0–100). | Position is the easiest value to use in themes ("Top 10"). Percentile is the most useful for relative comparisons across catalogs of different sizes. Score is the underlying number the others are derived from — useful if you want to apply your own thresholds. ## Enabling for a recipe Open the recipe you want to publish and tick **Push rank to metafields** in the sidebar. [Image: Push rank to metafields checkbox in the recipe sidebar] The help text under the checkbox shows the exact metafield keys this recipe will write. Save the recipe and a confirmation banner appears at the top of the page: [Image: Rank metafields enabled banner showing minutes until next sync] The banner shows how many minutes remain until the next sync. The first push happens on the next hourly cycle — there's no manual trigger. ## Sync schedule Pushes run **hourly**. Each cycle re-ranks all products using the recipe's current attributes and weights, then writes the three metafields per product. If a recipe's attributes change, the next sync picks up the new ranking automatically. There's nothing to configure here — toggle the checkbox on, and the values stay current going forward. ## Default vs. additional recipes The metafield key naming depends on whether the recipe is your **default** or an **additional** recipe: | Recipe type | Metafield keys | | --- | --- | | Default recipe | `dynasort.rank_position`, `dynasort.rank_score`, `dynasort.rank_percentile` | | Additional recipe (id `5574`) | `dynasort.rank_position_5574`, `dynasort.rank_score_5574`, `dynasort.rank_percentile_5574` | The default recipe gets the bare keys because it represents your store's primary ranking. Additional recipes get a `_` suffix so multiple recipes can coexist on the same product without overwriting each other. You can opt in to as many recipes as you want — each one adds three more metafields per product. A product viewed in the Shopify admin with both the default recipe and one additional recipe enabled looks like this: [Image: Shopify product admin showing six dynasort metafields: three for default plus three suffixed with the recipe id] Running multiple recipes side-by-side is useful when you want to surface different orderings in different places — for example, the default recipe drives your collection sort, while a "Maximize Profit" recipe powers a homepage carousel of your highest-margin products. ## Using the metafields Once published, the metafields work like any other product metafield. A few common uses: - **Theme Liquid** — read `product.metafields.dynasort.rank_position` to show a badge or filter products in a section. - **Shopify Flow** — trigger an action when `dynasort.rank_percentile` crosses a threshold (e.g. notify the buying team when a product drops out of the top quartile). - **Storefront API / headless** — query the metafield alongside the product to power custom storefronts. - **Third-party apps** — many search, recommendation, and reporting apps can read product metafields as inputs. ## Tips - **Make sure the recipe you're pushing matches the one that's actually applied to your collections.** Otherwise the metafield values will reflect a different ranking than what shoppers see. - **Use additional recipes for parallel rankings, not experiments.** For comparing two recipes head-to-head, [A/B Testing](https://docs.dynasort.io/ab-testing/) is the right tool — it measures shopper behavior rather than just publishing values. - **Disable when you no longer need it.** Turning the checkbox off stops new writes, but existing metafield values stay on your products until you remove them in the Shopify admin or via the Admin API. ## Frequently asked questions **Q: Which metafields does Dynasort write when Push Rank is enabled?** Three product metafields in the 'dynasort' namespace: rank_position (1 = top of the global ranking), rank_score (the raw recipe score, higher is better) and rank_percentile (0 to 100 among all ranked products). **Q: How often are the rank metafields updated?** Hourly. Each cycle re-ranks all products with the recipe's current attributes and weights and rewrites the three metafields. The first push happens on the next hourly cycle after you save the recipe; there is no manual trigger. **Q: How are metafields named for additional recipes?** The default recipe writes the bare keys such as dynasort.rank_position. Every additional recipe adds its id as a suffix, for example dynasort.rank_position_5574, so several recipes can publish rankings on the same product without overwriting each other. **Q: How can I show a Top 10 badge in my theme?** Read product.metafields.dynasort.rank_position in Liquid and show the badge when the value is 10 or lower. The same metafields are available to Shopify Flow, the Storefront API and any app that reads product metafields. **Q: Is the published rank per collection or store-wide?** Store-wide. The position, score and percentile describe where the product sits in the recipe's ranking of the whole catalog, not within one collection. **Q: What happens when I turn Push Rank off?** Dynasort stops writing new values. The existing metafield values stay on your products until you remove them in the Shopify admin or through the Admin API. --- # Managed Collections URL: https://docs.dynasort.io/managed-collections/ Dynamically select products for a collection using data-driven conditions, optionally ranked by a recipe. Managed Collections allow Dynasort to dynamically select products for a collection based on data-driven conditions. Unlike standard Shopify collections, which rely on manual product selection or tagging, Managed Collections update automatically as product data changes. ## How Managed Collections Work 1. Define conditions to determine which products qualify. 2. Choose matching logic (match all vs match any). 3. Optionally apply a [Recipe](https://docs.dynasort.io/recipes/) to rank selected products. 4. Optionally limit the collection to the top N products. 5. Push updates to Shopify automatically. ## Condition Types - Boolean conditions (true/false) - Comparative conditions (e.g. price greater than $50) - String matching conditions (e.g. title contains “Limited Edition”) ## Example Use Cases - Best sellers over $100 - Full size run sneakers - Promotional products by tag ## Why Use Managed Collections? - Dynamic and automated: collections update as data changes. - More control: select products based on precise criteria. - Seamless Shopify integration. ## Frequently asked questions **Q: What is a managed collection in Dynasort?** A collection whose products Dynasort selects automatically from conditions you define, such as 'price greater than $50' or 'back in stock in the last 7 days'. Membership updates as product data changes, and the selection can be ranked with a recipe and capped at the top N products. **Q: How do managed collections differ from Shopify automated collections?** Shopify automated collections match catalog fields like tag, type and price. Dynasort managed collections can also use performance and stock signals such as sales, conversion rate, margin, review ratings, product clicks, full size run and back in stock, then rank the result with a recipe. **Q: What does 'match all' versus 'match any' mean?** 'Match all' includes a product only when every condition is true, which narrows the collection. 'Match any' includes a product when at least one condition is true, which widens it. **Q: Can I limit a managed collection to a fixed number of products?** Yes. Apply a recipe to rank the qualifying products and set a top N limit, for example the 24 best-converting products over $100. **Q: How many managed collections does each plan include?** Demo 2, Basic 10, Pro 25 and Enterprise 100. See Plans and Billing. --- # Recipes URL: https://docs.dynasort.io/recipes/ Recipes define ranking logic by assigning values and weights to attributes. Recipes are the foundation of Dynasort’s collection sorting process. They define how products are ranked by assigning values to specific Attributes and tallying total scores to determine order. ## How Recipes Work 1. Define attributes and values. 2. Compare and rank products. 3. Tally and sort products by total points. ## Recipe Settings and Options - Default recipe (apply automatically) - Use boost (optional) - Sold-out product handling - Tie breakers (inventory, sales, price) ## Managing Recipes 1. Navigate to Recipes. 2. Create a new recipe or edit an existing one. 3. Assign attributes and set values. 4. Configure optional settings. 5. Save and apply to collections. ## Why Use Recipes? - Automates merchandising. - Customizable and flexible. - Ensures consistency across collections. ## Frequently asked questions **Q: What is a Dynasort recipe?** A recipe is the ranking logic for a collection: a list of attributes, each with a point value. Dynasort scores every product against each attribute, adds up the points and sorts the collection from highest to lowest total. **Q: What settings does a recipe have besides attributes?** Whether it is the default recipe applied automatically, whether product Boost values are used, how sold-out products are handled, and tie breakers such as inventory, sales or price for products with equal scores. **Q: What is a tie breaker in a recipe?** The rule that orders products with identical scores. Collection recipes can break ties by inventory, sales or price; search recipes default to Shopify relevance so results on a new store match Shopify's order until data accumulates. **Q: Are there different types of recipes?** Yes: collection recipes for collection sorting and managed collections, search recipes for Search Re-ranking, and recommendation recipes for Product Recommendations and post-purchase offers. **Q: Can I use the same attribute more than once in a recipe?** Yes. Add multiple instances with different settings, for example Full Size Run for size and again for colour, or a high-weight 3-day Back In Stock instance alongside a low-weight 30-day one. **Q: How many recipes can I create?** Demo 10, Basic 20, Pro 50 and Enterprise 250. See Plans and Billing. --- # Sort Rotation URL: https://docs.dynasort.io/sort-rotation/ Rotate a collection through Shopify sort orders and Dynasort recipes on a schedule you choose, from every day to every few weeks. Sort rotation changes how a collection is sorted on a schedule. You pick an ordered list of steps, such as Best selling, then Newest, then a Dynasort recipe, and choose how often to switch. Dynasort walks through the steps in order and loops back to the first one, so a collection never sits on the same sort for too long. It suits stores that want returning shoppers to see a fresh arrangement each week, catalogs where no single sort order serves every visitor, and merchants who want to mix Shopify's built-in sorting with Dynasort recipes without touching the collection by hand. ## How it works A rotation has two parts: - **Steps.** An ordered list. Each step is either a Shopify sort order (Most relevant, Best selling, Product title A-Z or Z-A, Highest or lowest price, Newest, Oldest) or one of your Dynasort recipes. A rotation needs at least two steps and can have up to thirty. The same option can appear more than once. - **Schedule.** How often to switch and at what time of day. Choose a preset such as every day, every week, every two weeks or every 30 days, or type any number of days from 1 to 365. Pick the hour, and for weekly rotations pick the weekday. Times are in your store's timezone. When you start a rotation, the first step is applied straight away. Every switch after that happens at the time you chose. At each switch Dynasort moves to the next step: - On a **Shopify sort** step, Dynasort turns its own sorting off for that collection and sets the collection's default sort in Shopify to the one you picked. Shopify keeps that order up to date on its own. - On a **Dynasort recipe** step, Dynasort turns sorting on for that collection with that recipe, re-sorts it right away, and keeps re-sorting it on your store's normal schedule until the next switch. > **One owner per collection** > > While a rotation is running, it owns the collection. The status toggle and recipe selector on the collection page are locked, bulk on/off actions skip rotating collections, and you cannot start an A/B test on it. Stop the rotation to take manual control again. ## Setting up a rotation Open the collection and find the **Sort rotation** section under the recipe card. Click **Set up rotation**. 1. **Add steps.** Choose an option from the dropdown, which lists Shopify sort orders first and your Dynasort recipes below them, and click **Add**. Reorder steps with the arrows or remove them with the bin icon. 2. **Choose a schedule.** Pick a preset or enter a custom number of days, set the hour, and set the start date. For weekly rotations, pick the weekday and the start date fills in for you. 3. Click **Start rotation**. The first step is applied immediately. The next switch lands on the first scheduled slot after now, so if you pick "every week on Monday at 00:00" on a Wednesday, the first switch is the coming Monday. > **Mixing Shopify sorts and recipes** > > A popular pattern is one Shopify sort followed by one Dynasort recipe, for example Best selling for a week and then your Dynasort Default recipe for a week. The Insights page shows conversion for the collection over time, so you can see which arrangement your shoppers responded to. ### Rotating many collections at once On the **Collections** page, click **Sort rotation** in the page header. The bulk window lets you tick any number of collections, build the steps and schedule once, and start the same rotation on all of them. All of those collections switch together on the same schedule. The same window has a **Stop** mode that ends the rotation on every collection you tick. Managed collections (the ones Dynasort creates for you) are always sorted by Dynasort and are not offered here. ## Monitoring a rotation While a rotation is active, the collection page shows: - **Now.** The step that is live, with a green badge for a recipe step and a blue badge for a Shopify sort. - **Next switch.** When the next step is applied, shown in your local time. - **Schedule.** The interval, hour, and timezone. - **The full step list**, with the live step in bold. - **Recent.** The last five events: starts, switches, edits, pauses, and stops. On the Collections page, rotating collections carry a **Rotating** badge next to their name. A paused rotation shows **Paused**. ## Editing, pausing, and stopping - **Edit** changes the steps or the schedule without re-applying anything. The rotation keeps its place in the list and switches next at the new schedule's first slot. - **Pause** freezes the rotation on whatever step is live. Nothing switches until you resume, and the collection stays locked. - **Resume** picks the schedule back up. The next switch is the first slot after now. - **Stop** ends the rotation and puts the collection back to how it was before the rotation started: the same on/off status, the same recipe, and the same Shopify default sort. The collection page unlocks. ## Tips - **Match the interval to your traffic.** A week is a good default. Daily switches suit large, high-traffic collections. Thirty days suits seasonal catalogs where you want a stable arrangement for the month. - **Recipe steps need store sorting switched on.** A Shopify sort step switches on schedule regardless, but a recipe step is only re-sorted while store-level sorting is on. The card warns you if it is off. - **Pins and boosts apply on recipe steps only.** Shopify's own sort orders do not support pinned products, so a pinned product is only held in place during Dynasort recipe steps. - **Manual sorting is not offered as a step.** A "Manually" step with nothing reordering the collection would freeze whatever arrangement was last applied, which is rarely what you want. If you need a fixed arrangement, use a Dynasort recipe with pins. - **A/B testing and rotation are separate tools.** If you want to know which of two sorts converts better, run an A/B test. If you want variety on a schedule, use a rotation. ## Frequently asked questions **Q: What is sort rotation in Dynasort?** A schedule that changes how a collection is sorted. You build an ordered list of steps, each a Shopify sort order or a Dynasort recipe, and choose how often to switch. Dynasort walks through the steps and loops back to the first, so returning shoppers see a fresh arrangement. **Q: Which steps can a rotation include?** Any Shopify sort order (Most relevant, Best selling, Product title A-Z or Z-A, Highest or lowest price, Newest, Oldest) and any of your Dynasort recipes. A rotation needs at least two steps, can have up to thirty, and the same option may repeat. **Q: How often can a rotation switch?** Any interval from 1 to 365 days, with presets for every day, every week, every two weeks and every 30 days. You pick the hour, and for weekly rotations the weekday, in your store's timezone. **Q: What happens on a Shopify sort step?** Dynasort turns its own sorting off for that collection and sets the collection's default sort in Shopify to the order you picked. On a recipe step it turns sorting back on with that recipe, re-sorts immediately and keeps re-sorting on the normal schedule until the next switch. **Q: How is sort rotation different from A/B testing?** Rotation is for variety on a schedule. A/B testing is for measuring which of two sorts converts better, with statistics. A collection cannot run both at once. **Q: Can I edit a collection while it is rotating?** No. The rotation owns the collection: the status toggle and recipe selector are locked, bulk actions skip it and A/B tests cannot start. Pause or stop the rotation to take manual control. **Q: What does stopping a rotation do?** It restores the collection to how it was before the rotation started: the same on/off status, the same recipe and the same Shopify default sort, and it unlocks the collection page. **Q: Do pins and boosts work during a rotation?** Only on Dynasort recipe steps. Shopify's own sort orders do not support pinned products, so a pin is held in place during recipe steps and released during Shopify sort steps. **Q: Can I rotate many collections at once?** Yes. On the Collections page click Sort rotation, tick any number of collections, build the steps and schedule once, and they all switch together. The same window has a Stop mode. --- # Collection Issues URL: https://docs.dynasort.io/collection-issues/ Dynasort monitors collections for merchandising issues and can notify you automatically. Dynasort monitors collections for common merchandising issues, helping ensure they remain optimized and visually appealing. ## Automated Collection Checks Dynasort can identify: - Low product count - Out-of-stock products above the fold - Broken size runs above the fold ## Customizing Issue Detection - Adjust above-the-fold threshold - Per-collection issue settings ## Automated Notifications Enable email notifications and choose frequency: - Daily - Weekly - Monthly ## Managing Collection Issues 1. Navigate to Collection Issues. 2. Review flagged collections and detected issues. 3. Adjust settings or take action. 4. Enable notifications for proactive monitoring. ## Frequently asked questions **Q: Which collection issues does Dynasort detect?** Three: a low product count, out-of-stock products above the fold, and broken size runs above the fold. Flagged collections are listed on the Collection Issues page. **Q: What does 'above the fold' mean in Collection Issues?** The number of products a shopper sees before scrolling. You set this count on the Settings page, and Dynasort only flags out-of-stock products or broken size runs within it. **Q: Can Dynasort email me about collection issues?** Yes. Turn on issue notifications and choose daily, weekly or monthly delivery to the recipients you list in Settings. **Q: Can I change issue detection for a single collection?** Yes. Issue settings can be adjusted per collection as well as store-wide. --- # Search Re-ranking URL: https://docs.dynasort.io/search-re-ranking/ Put your best products at the top of search results. Shopify decides what matches a query; your Dynasort recipe decides the order. Search re-ranking applies your Dynasort recipes to your storefront's search results. Shopify still decides *which* products match a shopper's query (including typo tolerance and synonyms), and your recipe decides *what order* they appear in, so your best sellers, high-margin items, or in-stock products rise to the top instead of whatever the default relevance happens to surface. Real store data shows why order matters: in one large catalog we analyzed, nearly half of all search result clicks landed *past the third position*. Shoppers scroll, and what they find there is up to you. ## How it works Think of search as two separate jobs: 1. **Matching** stays with Shopify. A query like "jacket" matches the same set of products it always did. 2. **Ordering** moves to your active search recipe. The matched products are re-scored by the recipe's attributes (sales, conversion rate, inventory, and so on) and returned in that order. Because matching is untouched, shoppers never see products that don't fit their query, and they never lose results they would have found before. ### Tie-breakers and thin data When several products score the same (common on newer stores with little sales history), the recipe's **tie-breaker** decides their order. Search recipes default to **Shopify relevance** as the tie-breaker, which means: with no data at all, your results look exactly like Shopify's, and as data accumulates your recipe takes over gradually. No cliff, no scrambled results on day one. ## Where it appears Re-ranking covers both storefront search surfaces: - **The search results page**: the full result grid, with pagination. - **The live search dropdown**: the suggestions that appear as a shopper types, re-ranked by the same recipe. ## Setup 1. **Create a search recipe.** On the **Recipes** page, choose **Add recipe → Search recipe**. Pick the attributes that define "best" for your store and weight them. Dynasort seeds sensible defaults you can start from. [Image: Search recipe editor with attributes and the tie-breaker setting] 2. **Preview the re-ranking.** In the recipe editor, type any query into **Preview re-ranking** to see exactly how results will be ordered, before anything is live. [Image: Preview re-ranking showing reordered results for a query] 3. **Activate it.** On the **Search** page, choose your active recipe (search uses one active recipe at a time) and connect the storefront. The status banner tells you when everything is ready. [Image: Search page with active recipe, storefront connection, and display settings] 4. **Add the storefront pieces** in your theme editor. On the search template, add the **Dynasort Search Results** app block (in the block picker under **Apps**) and remove or hide your theme's own results section. Then, under **Theme settings → App embeds**, toggle on **Dynasort Live Search** so the typeahead dropdown is re-ranked too; set its hide selector for your theme per [Live Search theme selectors](https://docs.dynasort.io/search-re-ranking/live-search-selectors/). > Changing which products rank where never requires touching your theme again. Edit the active recipe and the storefront follows. ## Display settings The **Search** page controls how the results grid looks: columns per device, results per page, and which details show on each card (color swatches, sale and new badges, star ratings, quick add-to-cart). These settings apply to the results page grid. The live search dropdown always uses a compact list (thumbnail, title, price) designed for fast scanning. ### Variant swatches Swatches can render as **color dots** or as **variant images**, small thumbnails of each color's own product photo. Variant images are the better choice when your color names are brand-specific ("Preloved Ink") rather than plain colors, or when the product photo says more than a dot ever could. **Swatch option name** pins the swatch row to one specific option, usually Color. When it's set, products *without* that option show no swatches at all. That's the tool for catalogs where some products use options for configuration rather than color: a shirt with a Color option gets its swatch row, while a golf club whose options are shaft and loft combinations gets a clean card that clicks through to the product page. Leave the field empty and Dynasort picks a color-like option automatically. ### Savings note The **Savings note** adds the discount next to the price on marked-down products: "(Save $60.00)" as a dollar amount, or "(Save 40%)" as a percentage. When the discount varies across a product's variants, the wording switches to "(Save up to $107.50)". Products that aren't discounted show nothing, so the note never renders a zero. ### Custom badges Beyond the built-in Sale, New, Bestseller, and Low stock badges, you can define your own. Each badge pairs a label and colors with one matching rule: | Match by | The badge appears on products that... | | --- | --- | | Tag | carry the tag you specify | | Title contains | have the text anywhere in their title | | Vendor | are from that exact vendor | | Product type | have that exact product type | | Metafield | have a matching value in the metafield you name (`namespace.key`) | Metafield matching also understands **badge metaobjects**. If your store manages badges as a metaobject list on each product (a common pattern for "Preorder", "Coming Soon", or promo badges), a rule can simply name the badge, for example match value `Preorder` on `product.badges`, and Dynasort resolves the reference for you. New badge definitions and label edits are picked up automatically. > Custom badges always render when their rule matches; the per-type toggles above only govern the built-in badges. ### Hiding prices until a click (MAP) If some of your products can't display an advertised price, brand MAP agreements being the usual reason, **Price visibility** hides the entire price block (price, compare-at strike-through, and the savings note) on flagged products behind a "Click to Reveal Price" control. Flagging is metafield-driven: point the setting at the metafield your product pages already use for this, and search result cards follow the same rules. In the live search dropdown, flagged products show the reveal text in place of a price. [Image: Storefront search results grid rendered by Dynasort] [Image: Live search dropdown with re-ranked suggestions] ## Measuring results Every time Dynasort serves a search results page, it records what was served. From there it tracks what shoppers did with it: - **Serves**: how many times the recipe ordered a results page. - **Clicks and CTR**: clicks on served results, with the position that was clicked. - **Adds**: served products added to the cart, whether from the result card or the product page, within the same visit. - **Checkouts**: visits where a served product was added and the shopper went on to check out. You'll find these numbers on the search recipe's page: totals in the sidebar and a day-by-day table below the editor. They're the foundation for comparing recipes, and for the A/B testing of search recipes we're building toward. > **Methodology, in plain English** > > Attribution is deliberately conservative. A click only counts if it was on a result Dynasort actually served; an add-to-cart only counts for products that appeared in those results, during the same visit; a checkout only counts when a served product was added first. Numbers here should under-promise rather than flatter. ## Customizing the look (CSS) The storefront pieces ship without `!important` rules, so your theme's CSS can override anything. Useful hooks: **Results grid** (`.dynasort-search`): the root element exposes CSS custom properties you can set from your own stylesheet: ```css .dynasort-search { --ds-cols-desktop: 5; /* columns per breakpoint */ --ds-gap: 1.5em; /* grid gap */ --ds-radius: 12px; /* image corner radius */ --ds-aspect: 4 / 5; /* card image aspect ratio */ } ``` Element classes follow a consistent naming scheme: `.dynasort-search__card`, `__media`, `__title`, `__price`, `__badges`, `__swatches`, `__pager`, `__summary`, `__empty`, plus `__save` (the savings note) and `__price-reveal` (the MAP reveal control). **Live search dropdown** (`.dynasort-predict-*`): `.dynasort-predict-panel` (the container, solid white by default), `.dynasort-predict-item`, `.dynasort-predict-thumb`, `.dynasort-predict-title`, `.dynasort-predict-price`, `.dynasort-predict-all`. > **Referencing theme colors** > > Modern Shopify themes store colors as bare RGB triples. To reuse a theme color variable in your overrides, wrap it: `background: rgb(var(--color-background));` The bare variable is not a valid CSS color on its own. ## Tips - Start with the seeded default recipe and watch the serving numbers for a week before tuning weights. - If your store is new and everything ties, that's fine: the Shopify-relevance tie-breaker keeps results sensible until your data differentiates them. - Sold-out products can be hidden or shown per recipe; hiding them is usually the biggest single win for search conversion. ## Frequently asked questions **Q: What does Dynasort search re-ranking do?** It changes the order of storefront search results without changing which products match. Shopify still decides what matches a query, including typo tolerance and synonyms, and your active Dynasort search recipe decides the order, so best sellers, high-margin or in-stock products rise to the top. **Q: Will re-ranking remove or add products from search results?** No. Matching is untouched, so shoppers see exactly the products they would have found before, in a different order. The only optional exclusion is hiding sold-out products, which you set per recipe. **Q: What happens on a new store with little sales data?** Search recipes default to Shopify relevance as the tie breaker. With no data, results look exactly like Shopify's, and the recipe takes over gradually as data accumulates. There is no cliff on day one. **Q: Which search surfaces are re-ranked?** Both: the full search results page with pagination, through the Dynasort Search Results app block, and the live search dropdown that appears as a shopper types, through the Dynasort Live Search app embed. **Q: What theme setup does search re-ranking need?** Two steps in the theme editor: add the Dynasort Search Results app block to the search template and hide the theme's own results section, then turn on the Dynasort Live Search app embed under App embeds and set its hide selector per Live Search theme selectors. After that, recipe changes never touch the theme again. **Q: Can I preview re-ranked results before going live?** Yes. In the search recipe editor, type any query into Preview re-ranking to see the exact order the storefront will serve. **Q: How does Dynasort measure search performance?** Every served results page is recorded, then serves, clicks with position, click-through rate, adds to cart and checkouts are tracked. Attribution is conservative: a click counts only on a served result, an add only for a served product in the same visit, and a checkout only when a served product was added first. **Q: Can I hide prices on MAP-restricted products in search results?** Yes. The Price visibility setting hides the price block behind a 'Click to Reveal Price' control on products flagged by a metafield you choose, on both the results grid and the live search dropdown. **Q: How many search recipes can be active?** One at a time. Activating a different recipe deactivates the previous one, and setting the active recipe to none turns search re-ranking off. --- # Live Search theme selectors URL: https://docs.dynasort.io/search-re-ranking/live-search-selectors/ Which CSS selectors the Dynasort Live Search embed needs for your theme, with values for every free Shopify theme family. The **Dynasort Live Search** app embed re-ranks the suggestion dropdown that appears while a shopper types. To do that on any theme, it needs to know two things, both set in the theme editor under **Theme settings → App embeds → Dynasort Live Search**: - **Search input selector**: which search box(es) to attach to. The default (`input[type="search"], input[name="q"]`) matches nearly every theme, including all of Shopify's free themes. You almost never need to change it. - **Native dropdown selector to hide**: your theme ships its own suggestion panel. Without this setting, both panels appear stacked on top of each other. Set it to your theme's suggestion container and Dynasort's re-ranked suggestions take over cleanly. [Image: The Dynasort Live Search embed settings in the theme editor, showing the two selector fields] ## Selectors by theme | Theme | Search input selector | Native dropdown selector to hide | |---|---|---| | Dawn, Craft, Sense, Studio, Refresh, Spotlight, Ride, Taste, Crave, Origin, Colorblock, Publisher | *(leave default)* | `#predictive-search-results` | | Horizon, Savor, Tinker, Beyond, Vessel | *(leave default)* | `#search-modal .predictive-search-form__content` | On the Horizon family, search opens in a full modal rather than a dropdown. Dynasort detects this and renders its suggestions inside the modal, right where the theme's own results would have appeared. No extra configuration is needed beyond the selector above. This table grows as we verify more themes. If your theme is not listed, [email us at hello@dynasort.io](mailto:hello@dynasort.io) with your theme's name and we will test it and add it here. ## Finding the selectors on any other theme 1. On your storefront, right-click the search box and choose **Inspect**. 2. Check the highlighted `` element. If it has `type="search"` or `name="q"`, the default input selector already matches and you can leave it alone. 3. Type a couple of characters so your theme's own suggestions appear. 4. In the inspector, find the container element that holds those suggestions and note its `id` or a distinctive class. 5. Enter it in the embed's **Native dropdown selector to hide** field, prefixed with `#` for an id (for example `#predictive-search-results`) or `.` for a class. 6. Save, reload the storefront, and type again. You should see one suggestion panel: Dynasort's. ## Troubleshooting - **Two suggestion panels stacked**: the hide selector is empty or does not match. Re-check step 4 above. - **No suggestions at all**: the input selector does not match your theme's search field. Inspect the input and adjust. - **Suggestions appear but the theme's panel container leaves an empty gap**: some themes reserve space for their panel. Contact support with your theme name; a small CSS override usually resolves it. - **Results-page grid works but the dropdown does not**: the results grid is a separate app block; the dropdown comes from this embed. Confirm the embed is toggled on in **Theme settings → App embeds**. ## Frequently asked questions **Q: Which two settings does the Dynasort Live Search embed need?** A search input selector, which tells it which search box to attach to, and a native dropdown selector to hide, which removes the theme's own suggestion panel so only Dynasort's re-ranked suggestions appear. Both are set under Theme settings, App embeds, Dynasort Live Search. **Q: Which hide selector do Dawn and the other free Shopify themes use?** For Dawn, Craft, Sense, Studio, Refresh, Spotlight, Ride, Taste, Crave, Origin, Colorblock and Publisher, leave the input selector at its default and set the hide selector to #predictive-search-results. **Q: Which hide selector do Horizon-family themes use?** For Horizon, Savor, Tinker, Beyond and Vessel, set the hide selector to #search-modal .predictive-search-form__content. Dynasort detects the Horizon search modal and renders its suggestions inside it. **Q: Why do I see two suggestion panels stacked?** The hide selector is empty or does not match your theme's suggestion container. Inspect the container that holds the theme's suggestions, note its id or class, and enter it prefixed with # for an id or . for a class. **Q: Do I need to change the search input selector?** Almost never. The default, input[type="search"], input[name="q"], matches nearly every theme including all of Shopify's free themes. **Q: My theme is not in the table. What should I do?** Follow the inspect steps on this page to find the selectors yourself, or email hello@dynasort.io with your theme's name and the Dynasort team will test it and add it to the table. --- # Product Recommendations URL: https://docs.dynasort.io/product-recommendations/ Recipe-ranked "You may also like" rows for your product, cart, collection, and home pages, with per-placement control over what shows and how it looks. Product recommendations put a row of recipe-ranked products anywhere on your storefront: "You may also like" on product pages, "Complete your order" in the cart, "Recommended for you" on the home page. Unlike black-box recommendation widgets, you decide the logic: each placement is driven by a recommendation recipe you can read, edit, and measure. ## How it works A **placement** is a spot on your storefront (product page, cart, collection page, home page, plus custom slots you can define). You bind a **recommendation recipe** to each placement, and that recipe decides which products appear there and in what order. Recommendations are seeded by context: - **Product page**: recommendations relate to the product being viewed. - **Cart**: recommendations consider everything in the cart, and never repeat what's already in it. - **Home and custom placements**: store-wide picks, ranked by the recipe. Each recipe also has a **source strategy**: recommend from the whole catalog, or stay within a scope such as the seed product's own collection. Rankings refresh automatically as your store's data changes. ## Setup 1. **Create a recommendation recipe** (Recipes page → **Add recipe → Recommendation recipe**). Dynasort seeds proven starting points such as "Bestsellers You May Like" and "Trending Now". 2. **Bind it to a placement** on the **Recommendations** page: pick a recipe for each placement you want live and tick Enabled. [Image: Recommendations page with placements bound to recipes] 3. **Add the section in your theme editor** where you want the row to render, and select which placement it represents. One section, added once; everything else is controlled from the app. ## Display settings Every placement has its own display settings, so the cart row can look different from the product-page row: - **Card fields**: compare-at price, color name, swatches, star ratings, wishlist control, quick add-to-cart. - **Badges**: sale, new, bestseller, and low stock, each with its own colors and label text (translatable per language). - **Image**: aspect ratio and hover-to-see-second-image. - **Layout**: grid or carousel, cards per row per device, and a minimum count below which the row hides itself rather than look sparse. - **Behavior**: how sold-out items are handled, a per-brand cap for multi-vendor catalogs, and the quick-add overlay styling. - **Heading**: the row's title, translatable per language. [Image: Per-placement display settings expanded] ## Previewing Each placement card has a live preview: pick any product as the seed and see the exact cards the storefront will serve, restyled instantly as you change settings. The **Full preview** button opens a desktop-width version. [Image: Placement preview with seed product picker] [Image: Storefront recommendations row on a product page] ## Measuring results Dynasort records every recommendation serve and tracks what shoppers do with it: clicks (with position), adds to cart, and checkouts that follow. Open any recommendation recipe to see totals in the sidebar and a day-by-day serving table. > **Methodology, in plain English** > > Attribution is conservative: only clicks on cards Dynasort actually served count, adds only count for served products within the same visit, and a checkout only counts when a served product was added to the cart first. ## Customizing the look (CSS) The widget ships without `!important` rules so your theme CSS can override anything. The root element `.dynasort-recs` exposes custom properties: ```css .dynasort-recs { --ds-cols-desktop: 5; /* cards per row per breakpoint */ --ds-gap: 1.25em; --ds-radius: 10px; /* image corner radius */ --ds-aspect: 1 / 1; /* card image aspect ratio */ --ds-swatch-size: 1.8em; } ``` Element classes: `.dynasort-recs__card`, `__media`, `__title`, `__price`, `__vendor`, `__badges`, `__swatches`, `__sizes` (the quick-add size picker), `__heading`, `__arrow` (carousel navigation). > **Referencing theme colors** > > Modern Shopify themes store colors as bare RGB triples. To reuse a theme color variable in your overrides, wrap it: `background: rgb(var(--color-background));` The bare variable is not a valid CSS color on its own. ## Tips - Different placements deserve different recipes: "frequently bought together" logic suits the cart, while discovery-oriented recipes suit the home page. - Use the per-brand cap on multi-vendor catalogs so one brand doesn't monopolize the row. - Set **Minimum to show** to at least 2. A recommendation row with one lonely product does more harm than good. ## Frequently asked questions **Q: What is a placement in Dynasort product recommendations?** A spot on the storefront where a recommendation row renders: product page, cart, collection page, home page, or one of up to five custom placements. Each placement is bound to a recommendation recipe that decides which products appear and in what order. **Q: How does Dynasort choose which products to recommend?** By recipe and context. Product-page rows relate to the product being viewed, cart rows consider everything in the cart and never repeat what is already in it, and home or custom rows are store-wide picks. Each recipe also sets a source strategy: the whole catalog or a scope such as the seed product's collection. **Q: Do product recommendations need theme changes?** One step: add the Dynasort recommendations section in the theme editor where you want the row and select which placement it represents. Everything else, including recipe, layout and card fields, is controlled from the app. **Q: Can I style the recommendation cards to match my theme?** Yes. The widget ships without !important rules, so theme CSS overrides anything. The root .dynasort-recs element exposes custom properties for columns, gap, radius, aspect ratio and swatch size, and every element has a stable class such as .dynasort-recs__card. **Q: How does Dynasort measure recommendation performance?** Every serve is recorded and then clicks with position, adds to cart and following checkouts are tracked, with totals in the recipe sidebar and a day-by-day table. Attribution is conservative: only clicks on served cards count, adds count only for served products in the same visit, and a checkout counts only when a served product was added first. **Q: Can I preview a recommendation row before it goes live?** Yes. Each placement card has a live preview: pick any product as the seed and see the exact cards the storefront will serve, restyled instantly as you change settings. **Q: How do I stop one brand from filling the whole row?** Set the per-brand cap in the placement's behaviour settings. It limits how many cards a single vendor can occupy, which matters on multi-vendor catalogs. **Q: Do recommendations count against my plan?** Yes. Each recommendation row delivered to a shopper is one serve. Monthly allowances are 10,000 on Demo, 100,000 on Basic, 1,000,000 on Pro and unlimited on Enterprise. See Plans and Billing. --- # Post-purchase Recommendations URL: https://docs.dynasort.io/post-purchase-recommendations/ Recipe-ranked product recommendations on the order confirmation and order status pages, seeded by what the customer just bought. The moment right after a purchase is one of the highest-intent moments a store gets: the customer is engaged, trusts you, and just told you exactly what they like. Post-purchase recommendations put a recipe-ranked "Complete Your Order" row on the **Thank you** page (order confirmation) and the **Order status** page, seeded by the items in the order. ## How it works When a customer lands on the Thank you or Order status page, Dynasort looks at what they just bought and serves recommendations that pair with those items, ranked by the recipe you've bound to the placement. Items from the order itself are never recommended back. These pages are rendered by Shopify's checkout system, not your theme, so the cards automatically follow your checkout's typography and styling. The row shows each product's image, title, and price, with an optional sale badge, and clicks go to the product page. > Because checkout renders these cards, theme-style options such as swatches and quick add-to-cart don't apply here. The app only shows you the settings that actually work on this surface. ## Setup 1. **Bind a recipe** on the **Recommendations** page: the Post-purchase placement works like any other, pick a recommendation recipe and enable it. Cart-oriented recipes tend to fit this placement well. [Image: Post-purchase placement in the Recommendations page] 2. **Add the block to your Thank you page**: in Shopify admin, go to **Settings → Checkout → Customize**, switch the page picker to **Thank you**, and add the **Dynasort Recommendations** app block. [Image: Checkout editor adding the Dynasort Recommendations block] 3. **Add it to the Order status page** the same way, via the customer accounts editor, so customers returning to check their order see it too. ## Settings The Post-purchase placement has a focused set of controls: - **Products shown**: how many cards render (displayed as a single row that wraps on smaller screens). - **Minimum to show**: below this count the block renders nothing rather than look sparse. - **Sale badge**: on or off (checkout styles it; custom colors don't apply on this surface). - **Out-of-stock items** and **max per brand**: same behavior controls as other placements. - **Heading**: the row title, translatable per language; it follows the language the customer checked out in. [Image: Thank you page with the recommendations row] [Image: Order status page with the recommendations row] ## Measuring results Post-purchase serves and card clicks are tracked like every other surface: open the bound recipe to see serves, clicks, and CTR in its serving performance table. ## Tips - Bind a recipe with complementary-purchase logic (like your cart placement's recipe) rather than a bestsellers list; the customer just bought, so "goes well with what you got" outperforms "here's what's popular". - Keep **Products shown** modest (3 or 4). This surface rewards a confident short row, not a grid. - If the block doesn't appear after adding it, check that the placement is enabled and has a recipe bound in the app; an unbound placement renders nothing by design. ## Frequently asked questions **Q: Where do Dynasort post-purchase recommendations appear?** On the Thank you page shown right after checkout and on the Order status page customers return to. Both are rendered by Shopify's checkout, and the row is seeded by the items in the order. **Q: How do I add the post-purchase block?** In Shopify admin go to Settings, Checkout, Customize, switch the page picker to Thank you and add the Dynasort Recommendations app block. Add it to the Order status page the same way through the customer accounts editor. In the Dynasort app, bind a recommendation recipe to the Post-purchase placement and enable it. **Q: Why are swatches and quick add-to-cart missing on post-purchase cards?** Because Shopify checkout renders these pages, not your theme. The cards follow checkout typography and styling automatically and show image, title, price and an optional sale badge. Dynasort only shows the settings that work on this surface. **Q: Will it recommend products the customer just bought?** No. Items from the order itself are never recommended back. The recipe pairs products with what was purchased. **Q: The block does not appear on my Thank you page. Why?** Check in the Dynasort app that the Post-purchase placement is enabled and has a recipe bound. An unbound placement renders nothing by design. **Q: How many products should a post-purchase row show?** Three or four. This surface rewards a confident short row, and a recipe with complementary-purchase logic outperforms a plain best-sellers list here. --- # Insights URL: https://docs.dynasort.io/insights/ Track collection performance metrics and automate reporting. Dynasort provides built-in data collection and reporting for Shopify collection performance. ## Data Breakdown - Per collection - Per recipe - Overall performance (Dynasort-managed, Shopify-managed, total store) ## Tracked and Reported Metrics Dynasort tracks KPIs such as: - Views, sessions - Conversions and conversion ratio (CVR) - Add to cart rate - Exits and exit rate - Bounces and bounce rate ## Bot Traffic Insights count shoppers only by default: people, plus shopping agents that browse and buy on someone's behalf. Crawlers, scrapers and other bots are left out because they never buy and would drag your conversion and add-to-cart rates down. The **Traffic quality** card at the top of Insights shows how many bot sessions were left out, and warns you when a collection's traffic jumps without carts following. You can change what's counted under [Settings](https://docs.dynasort.io/settings/). See [Bot and Agent Traffic](https://docs.dynasort.io/bot-traffic/) for how bots are detected. ## Performance Timeline The Insights view includes a **performance timeline**: a chart of your key metrics over time, viewable per collection, per recipe, or store-wide. Pick a metric and a date range (for example the last 30 days) to see how it has trended. What makes the timeline especially useful is that it overlays **event markers** on the chart, so you can see exactly what changed and when, and line those changes up against performance. Markers include: - Sorting enabled or disabled - Recipe changed, or the current recipe's settings updated - A/B test started, ended, or switched variants - Pins, boosts, or managed-collection rules updated - A manual re-sort - Bot filtering turning on (October 6, 2026), and any change to the Traffic in Insights setting For a collection, the timeline also shows changes made to the recipe currently assigned to it, so a recipe edit you make elsewhere still appears on the affected collection's timeline. This makes it easy to answer "did that change actually help?" by reading the trend before and after each marker. ## Automated Reports Enable email reports delivered: - Daily - Weekly - Monthly ## How to Access Insights 1. Navigate to Insights. 2. View performance per collection, per recipe, or store-wide. 3. Configure automated reports under [Settings](https://docs.dynasort.io/settings/). 4. Use the data to refine sorting strategies. ## Frequently asked questions **Q: Which metrics does Dynasort Insights track?** Views, sessions, conversions and conversion rate (CVR), add-to-cart rate, exits and exit rate, and bounces and bounce rate, reported per collection, per recipe, and store-wide. **Q: Can I compare Dynasort-sorted collections with the rest of the store?** Yes. The overall view breaks performance into Dynasort-managed collections, Shopify-managed collections and the total store, so you can see the difference sorting makes. **Q: What is the performance timeline?** A chart of any key metric over a chosen date range, per collection, per recipe or store-wide, with event markers overlaid for sorting toggles, recipe changes, A/B test starts and ends, pin, boost and managed-collection edits, and manual re-sorts. It shows whether a change helped. **Q: How often is Insights data updated?** Once a day. Dynasort aggregates the day's shopper activity in an overnight run around 1:00 AM US Eastern time, so a given day's numbers appear the next morning. **Q: Can I get Insights by email?** Yes. Under Settings choose daily, weekly or monthly reports, the recipients and the timeframe in days the report covers. **Q: How much history does Insights keep?** Collection insights cover 365 days on every plan, including the free Demo plan. **Q: Does Insights count bot traffic?** Not by default. Since October 6, 2026 Insights count shoppers: people plus shopping agents that browse and buy for a person. Crawlers, scrapers and other bots are left out. See Bot and Agent Traffic. **Q: Can I include bots in my Insights numbers?** Yes. In Settings, set Traffic in Insights to All traffic, or to People only to leave out shopping agents as well. Sorting never uses bot visits either way. --- # A/B Testing URL: https://docs.dynasort.io/ab-testing/ Compare two sorting strategies head-to-head on a collection and let real shopper behavior pick the winner. A/B testing lets you compare two sorting strategies on the same collection and decide which one performs better based on real shopper behavior — not a hunch. You can pit one recipe against another, or test whether Dynasort's sorting beats your store's default order. ## How it works Instead of splitting visitors into two groups, Dynasort alternates the **whole collection** between the two variants on a fixed schedule. Every shopper who visits the collection during a given window sees the same sort order; when the toggle interval elapses, the next window flips to the other variant. This is called **strict alternation**. It avoids the cookie and personalization complexity of per-visitor splits, and it works cleanly inside Shopify without modifying your storefront code. > **Why alternation instead of a 50/50 split?** > > Per-visitor splits require setting cookies, segmenting the audience, and serving two different orderings simultaneously — which conflicts with Shopify's edge caching and can produce inconsistent shopping experiences across devices. Time-based alternation gives every shopper a consistent view, lets us measure both variants under the same traffic mix, and removes a class of caching bugs. ## Setting up a test Open the collection you want to test and click **Set Up A/B Test** in the sidebar. [Image: Setup modal with test type, recipes, and toggle interval] Choose a **Test Type**: - **Dynasort ON vs. OFF** — Compares your currently-applied recipe against the collection's *Revert To* sort order (typically your store's default like Best Selling, Manual, or Created Date). Use this to prove Dynasort is moving the needle versus doing nothing. - **Recipe A vs. Recipe B** — Compares two Dynasort recipes against each other. Recipe A is whatever is currently applied to the collection. Pick Recipe B from the dropdown. Set the **Toggle Interval** — how often the active variant flips. Available options range from 1 hour to 1 week. Common choices: - **1–3 hours** for high-traffic collections, so you cycle through enough windows quickly. - **6–12 hours** for medium traffic, to capture morning, afternoon, and evening shopper segments evenly. - **24–48 hours** for low-traffic collections, to make sure each window accumulates a meaningful number of sessions before flipping. - **72 hours or 1 week** for very low-traffic collections where daily variance would otherwise swamp the signal. Click **Start Test**. The test begins immediately on the next page-load. ## Monitoring an active test Once a test is running, the collection's sidebar shows a live A/B card: [Image: Active test card showing current variant, next toggle countdown, and runtime] The card shows you: - **Active** badge and the variant pair being compared. - **Currently active** — which variant shoppers are seeing right now. - **Next toggle** — countdown to the next variant flip. - **Running for** — total elapsed test duration. - **End Test** — stop the test and lock in whatever data has been collected. - **View Full Results** — open the metrics detail (see below). You can also see all active and completed tests at a glance from the **Collections** page using the new **A/B Testing** filter tab: [Image: Collections page filtered to A/B Testing, showing collections with active badges] Collections currently running a test display a green **A/B active** badge. Collections with completed tests display a grey **A/B results** badge, so you can come back to old results any time. ### Changing the recipe during a test If you try to change the active recipe on a collection while a test is running, Dynasort will warn you and ask to confirm: [Image: Warning modal: changing recipe will end the active test] The test will end, but **all results collected so far remain available** — they just stop accumulating. This guardrail exists because changing the underlying recipe mid-test would invalidate the comparison. ## Reading results Click **View Full Results** to open the metrics detail. [Image: Results detail with metrics table, lift, significance, and chart] The table compares the two variants across four metrics: | Metric | What it measures | | --------------- | --------------------------------------------------------------------------- | | Conversion Rate | % of sessions that resulted in a completed order | | Cart Rate | % of sessions that added at least one product to cart | | Exit Rate | % of sessions that left the site after viewing this collection | | Bounce Rate | % of sessions that landed on this collection and left without other actions | Each metric shows: - **Variant A** and **Variant B** values. - **Lift** — the percentage change of Variant B relative to Variant A. Green means B did better, red means A did better. (For Exit Rate and Bounce Rate, lower is better, so negative lift on those is good.) - **Significant?** — whether the observed difference is statistically meaningful. See below. Beneath the table you'll see total session counts for each variant, and below that, a chart of conversion rate over time for both variants. > **Wait for the sample-size threshold** > > Dynasort displays a warning until each variant has accumulated at least **100 sessions**. Below that threshold, the math is too noisy to draw conclusions and the chart is suppressed. Let the test keep running. ## Statistical methodology Dynasort uses a **two-proportion z-test** with **pooled variance** and a **two-tailed p-value**. In plain English: 1. For each metric, we count the number of sessions in each variant and the number that "converted" on that metric (e.g. completed an order, for Conversion Rate). 2. We compute the rate for each variant, plus a pooled rate from the combined data, and use the pooled rate to estimate the standard error of the difference. 3. From the standard error and the observed difference we get a z-score, then a two-tailed p-value. 4. **Significant? = Yes** when **p < 0.05** — i.e. there is less than a 5% chance the observed difference happened by chance if the two variants were actually equivalent. This is the standard approach used by most commercial A/B testing tools (Optimizely, VWO, Shopify's own conversion testing, etc.), so the numbers should match what you're used to seeing elsewhere. ### Why the 100-session minimum? The z-test is only reliable when both variants have enough observations for the underlying normal approximation to hold. Below ~100 sessions per variant, even large-looking lifts (±30%) routinely come from random noise. Dynasort hides the conclusion until the threshold is crossed so you don't act on a phantom result. > **When to trust a 'No' result** > > A "No" in the **Significant?** column doesn't necessarily mean the variants are equivalent — it might mean you haven't collected enough data yet to tell. If a metric is borderline and you care about it, let the test run longer rather than ending early. ### What about confidence intervals or Bayesian methods? The current results display p-values only. We're tracking interest in adding confidence intervals and a Bayesian "probability B beats A" view in a future release. If that would change how you'd use the feature, let us know. ## Ending a test Click **End Test** on the active card to stop the test. The results card on the Collections page transitions from green **A/B active** to grey **A/B results**, and the metrics detail remains accessible indefinitely. There is no automatic "winner picker" — Dynasort doesn't apply a winning recipe for you. After ending a test, decide which variant you want to run going forward and apply it manually. This is intentional: the statistical result is one input, but you may have business reasons (margin, inventory, brand fit) that override raw conversion lift. ## Tips for a clean test - **Run on collections with traffic.** A collection with 5 sessions a day will take weeks to cross the significance threshold. Pick collections that already see meaningful traffic. - **Don't peek and stop early.** Resist the urge to end a test the moment one variant looks ahead — early leads are usually noise. Wait for the **Significant?** column to flip to **Yes**, or for an honest amount of elapsed time to pass with enough data. - **One change at a time.** If you're testing Recipe A vs. Recipe B and the recipes differ in five attributes, you'll know which recipe won, but not *why*. To learn what's driving the lift, isolate one or two attributes per test. - **Watch out for seasonality.** Tests started right before Black Friday or a sale event may capture buying patterns that don't generalize. If possible, run during a representative window. - **End a test before changing the recipe.** It's preserved automatically, but it's cleaner to do it deliberately. ## Frequently asked questions **Q: How does Dynasort A/B testing split traffic?** It does not split visitors. Dynasort alternates the whole collection between the two variants on a fixed schedule, called strict alternation, so every shopper in a given window sees the same sort order and the next window flips to the other variant. **Q: Why alternate over time instead of a 50/50 visitor split?** Per-visitor splits need cookies and two simultaneous orderings, which conflicts with Shopify's edge caching and can show inconsistent orders across devices. Time-based alternation keeps every shopper's view consistent, measures both variants under the same traffic mix and needs no storefront code. **Q: What can I test?** Two test types: Dynasort ON versus OFF, which compares the applied recipe against the collection's revert sort order such as Best selling, and Recipe A versus Recipe B, which compares two Dynasort recipes. **Q: How long should the toggle interval be?** Options run from 1 hour to 1 week. Use 1 to 3 hours for high-traffic collections, 6 to 12 hours for medium traffic, 24 to 48 hours for low traffic, and 72 hours or a week when daily variance would otherwise swamp the signal. **Q: Which metrics does an A/B test report?** Conversion rate, cart rate, exit rate and bounce rate for each variant, the lift of B over A, session counts, a conversion-rate-over-time chart and whether the difference is statistically significant. **Q: How does Dynasort decide a result is significant?** With a two-proportion z-test using pooled variance and a two-tailed p-value. Significant means p is below 0.05, the same method used by most commercial A/B tools, and the verdict is hidden until each variant has at least 100 sessions. **Q: Does Dynasort automatically apply the winning variant?** No. When you end a test the results stay available indefinitely, but you choose which recipe to run going forward. Margin, inventory or brand reasons may outweigh a raw conversion lift. **Q: What happens if I change the recipe during a test?** Dynasort warns you and, if you confirm, ends the test. Everything collected so far is kept; it simply stops accumulating, because changing the recipe mid-test would invalidate the comparison. **Q: Which plans include A/B testing?** All of them, including the free Demo plan. See Plans and Billing. --- # Integrations URL: https://docs.dynasort.io/integrations/ How Dynasort connects to the review platforms you already use, to AI assistants like Claude and ChatGPT through the Connector API, and to Tapcart mobile apps. Dynasort integrates in three ways, and all of them work with tools you likely already run. It reads the product reviews you collect and folds them into sorting, it takes instructions from AI assistants through the Connector API, and it carries your sorting into a Tapcart mobile app. There are no storefront scripts and no theme changes in either case. Everything is applied through Shopify's own APIs. ## Review platforms Dynasort reads product ratings and review counts that your review app writes to Shopify as product metafields, then makes that data available as [Attributes](https://docs.dynasort.io/attributes/) you can weight inside a [Recipe](https://docs.dynasort.io/recipes/). Well-reviewed products can rise to the top of a collection automatically, without you re-importing anything or adding tags. ### Supported apps Dynasort automatically detects and reads review data from: - Yotpo - Judge.me - Loox - Okendo - Junip - Stamped - HelpfulCrowd - Trust Reviews - Debutify Reviews - Shopify Product Reviews If your review app writes ratings to standard product metafields and is not on this list, it may still work. Reach out and we will check the metafield namespace on your store. ### How to sort by reviews 1. Keep using your current review app. Nothing changes on the review side. 2. Confirm the review data is present on your products as a metafield. Most supported apps write this automatically. 3. In Dynasort, create or edit a [Recipe](https://docs.dynasort.io/recipes/) and add a review rating attribute. 4. Give it a weight, and blend it with other signals such as sales velocity, margin, inventory, or new arrivals so the final order reflects more than stars alone. 5. Apply the recipe to a collection. Dynasort re-sorts on your plan's schedule. 6. Check the collection [Insights](https://docs.dynasort.io/insights/) to confirm the change paid off. On Pro and Enterprise you can [A/B test](https://docs.dynasort.io/ab-testing/) it for proof. ### Rating alone is not enough A single five-star review is not the same as a 4.6 average across hundreds. Good review-based sorting weighs both rating and review volume so a product with one perfect score does not leapfrog a proven best seller. Because Dynasort blends review data with your other signals in one recipe, you stay in control of how much reviews influence the order. ## AI assistants (the Connector) The [Connector](https://docs.dynasort.io/connector/) is a secure, token-authenticated API that lets an AI assistant manage Dynasort in plain language. Point an assistant at the API, paste the ready-made system prompt from the Connector page in the app, and you can toggle collections, assign and swap recipes, re-sort on demand, set product boosts, switch search recipes, tune settings, manage recommendation placements, and read serve analytics, all from a conversation. Assistants that work well with the Connector include: - Claude (Anthropic) - ChatGPT (OpenAI) - Any tool or script that can send authenticated HTTP requests The Connector is available on Pro and Enterprise plans. See the [Connector documentation](https://docs.dynasort.io/connector/) for the full setup, the list of actions, and the copiable system prompt. ### Shopify Sidekick Separately, Shopify's own Sidekick assistant can query your Dynasort setup read-only through a set of built-in tools. This works on every plan and needs no API key. Ask Sidekick about your collections, recipes, and sorting status directly inside the Shopify admin. ## Mobile apps (Tapcart) A [Tapcart](https://www.tapcart.com/) app reads collections straight from Shopify and shows products in the order Shopify holds. Dynasort writes its ranking into that order, so every collection Dynasort sorts, every pin and boost, and every Sort Rotation step reaches the app with nothing to connect. Orders placed in the app are ordinary Shopify orders and already feed the sales attributes. What the app cannot give Dynasort on its own is shopper behaviour, because Shopify web pixels never run inside a native app. Tapcart's clickstream webhook closes that gap: copy the per-store URL from Dynasort **Settings**, paste it into Tapcart **Settings > Webhooks**, and in-app sessions, product views, carts and orders flow into [Insights](https://docs.dynasort.io/insights/). The full walkthrough, the event mapping and the caveats around in-app search providers are on the [Tapcart page](https://docs.dynasort.io/tapcart/). ## No storefront footprint All three families of integration are read-and-apply only. Dynasort reads review data and Tapcart events, and applies every sort through Shopify's APIs. It never injects storefront scripts and never edits your theme, so connecting your reviews, your AI assistant or your app adds nothing to your page weight. This is part of why Dynasort is Built for Shopify certified. ## Frequently asked questions **Q: Which review apps does Dynasort integrate with?** Yotpo, Judge.me, Loox, Okendo, Junip, Stamped, HelpfulCrowd, Trust Reviews, Debutify Reviews and Shopify Product Reviews. Dynasort detects them automatically and exposes their ratings and review counts as sorting attributes. **Q: Do I need an API key or export to sort by reviews?** No. Dynasort reads the rating and review-count metafields your review app already writes to Shopify products. Keep using the review app as normal, add a review attribute to a recipe and give it a weight. **Q: My review app is not listed. Will it work?** It may. If the app writes ratings to standard product metafields, Dynasort can usually read them. Email hello@dynasort.io and the team will check the metafield namespace on your store. **Q: Which assistants work with the Dynasort Connector?** Claude, ChatGPT and any tool that can send authenticated HTTP requests. Paste the system prompt from the Connector page, supply your API key and the assistant can enable collections, swap recipes, set boosts and read serve analytics. The Connector is available on Pro and Enterprise. See Connector. **Q: Does Dynasort work with Tapcart mobile apps?** Yes. Tapcart shows collections in the order Shopify holds, so every collection Dynasort sorts is sorted the same way in the app with nothing to connect. Connect Tapcart's clickstream webhook from Dynasort Settings to bring in-app browsing, carts and orders into Insights. See Tapcart. **Q: Does Dynasort work with Shopify Sidekick?** Yes. Sidekick can query your collections, recipes and sorting status read-only through built-in tools, on every plan, with no API key. **Q: Does integrating reviews or an assistant add scripts to my storefront?** No. Both integrations read data and apply sorts through Shopify's APIs. Dynasort never injects storefront scripts or edits your theme for these features, which is part of why it is Built for Shopify certified. --- # Connector (API Access) URL: https://docs.dynasort.io/connector/ Connect AI assistants and external tools to your Dynasort account with a secure API. The Connector gives you programmatic access to Dynasort through a REST-style API. You can use it to connect AI assistants like Claude or ChatGPT, build custom integrations, or automate merchandising workflows, all without touching the Dynasort dashboard. It covers collection sorting, option sorting, search re-ranking, product recommendations, and post-purchase offers. > **Plan requirement** > > The Connector is available on Pro and Enterprise plans. If you're on a free or Basic plan, you can view the Connector page in the app, but API key generation is disabled until you upgrade. ## Getting started Open **Connector** from the left sidebar in the Dynasort app. [Image: Connector page showing API Key management and System Prompt sections] The page has three sections: API Key management, a System Prompt for AI assistants, and an API Reference card. ### Generate an API key Click **Generate API Key** to create a new key. The full key is displayed exactly once: copy it immediately and store it somewhere safe. Dynasort only stores a hash of the key, so it cannot be retrieved later. Your key starts with `dyn_sk_` followed by a long hex string. Only one active key is allowed at a time. If you need a new one, revoke the current key first, then generate a fresh one. > **Store your key securely** > > Treat your API key like a password. Anyone with the key can read and modify your collections, products, and recipes through the API. If you suspect a key has been compromised, revoke it immediately from the Connector page. ## Using with AI assistants The fastest way to use the Connector is to paste the **System Prompt** into an AI assistant. The prompt contains your store URL, the API endpoint, authentication instructions, and a complete reference for every available action, everything the assistant needs to manage your Dynasort setup through conversation. **To set up an AI assistant:** 1. Click **Copy Prompt** on the Connector page. 2. Open your AI assistant (Claude, ChatGPT, or similar). 3. Paste the prompt as a system message or at the start of a new conversation. 4. When the assistant asks for your API key, provide the `dyn_sk_...` key you generated earlier. From there, you can ask the assistant to do things like "list my collections," "enable sorting on the Summer Sale collection," or "boost product X by 50 points" and it will make the API calls for you. > **One prompt, many sessions** > > You only need to copy the prompt once and can reuse it across conversations. The prompt is tied to your store, not to a specific session. Just provide your API key at the start of each new conversation. ## Using the API directly If you're building a custom integration, you can call the API directly. **Endpoint:** `https://dynasort.immersiveecommerce.com/api/v1/` All requests are **POST** with a JSON body. Authenticate with a Bearer token: ```bash curl -X POST https://dynasort.immersiveecommerce.com/api/v1/ \ -H "Authorization: Bearer dyn_sk_your_key_here" \ -H "Content-Type: application/json" \ -d '{"action": "list_collections"}' ``` ### Rate limits The API allows **60 requests per minute** per store. Every response includes rate limit headers: | Header | Description | |--------|-------------| | `X-RateLimit-Limit` | Maximum requests per minute (60) | | `X-RateLimit-Remaining` | Requests remaining in the current window | | `X-RateLimit-Reset` | Unix timestamp when the window resets | If you exceed the limit, the API returns HTTP 429 with a `Retry-After` header. ### Response format **Success:** ```json { "success": true, "data": { ... } } ``` **Error:** ```json { "error": true, "message": "Human-readable description", "code": "error_code" } ``` | Error code | Meaning | |------------|---------| | `unauthorized` | Invalid or missing API key | | `rate_limited` | Too many requests. Retry after the reset time | | `permission_denied` | Store plan does not include API access | | `invalid_action` | Unknown action name | | `invalid_params` | Missing or invalid required parameters | | `not_found` | Requested resource not found | | `server_error` | Internal error | ## Available actions [Image: API Reference card showing all available actions] The API exposes 25 actions organized into six categories. ### Collection management | Action | Description | |--------|-------------| | `list_collections` | List all collections with their sorting status, recipe assignment, and product count | | `get_collection` | Get detailed info about a single collection including its products | | `enable_collection` | Enable Dynasort sorting on a collection | | `disable_collection` | Disable sorting on a collection (reverts to configured sort order if set) | | `update_collection` | Assign a recipe and/or set the revert sort order for a collection | | `bulk_toggle_collections` | Enable or disable multiple collections at once | | `bulk_assign_recipe` | Assign a recipe to multiple collections at once | | `sort_collection` | Trigger an immediate sort using the assigned recipe | | `revert_collection` | Revert a collection to its configured revert sort order | ### Recipe management | Action | Description | |--------|-------------| | `list_recipes` | List the recipes of one type: `collection` (default), `recommendation`, or `search` | ### Product management | Action | Description | |--------|-------------| | `list_products` | List products with their Dynasort data, boost values, and option sorting status | | `get_product` | Get detailed info about a single product including its options | | `set_product_boost` | Set a boost value on a product (positive = boost up, negative = push down) | | `enable_product` | Enable option sorting on a product and configure sort rules for each option | | `disable_product` | Disable option sorting on a product | | `sort_product` | Trigger an immediate re-sort of a product's options | ### Search re-ranking | Action | Description | |--------|-------------| | `get_search_serving` | Get search serving status: recipes, the active recipe, storefront connection, display settings | | `set_search_recipe` | Set the active search recipe (`0` turns search re-ranking off) | | `update_search_settings` | Update the search results display settings (partial update) | | `connect_search_storefront` | Provision the Storefront API token search serving needs | ### Recommendations and post-purchase | Action | Description | |--------|-------------| | `list_placements` | List all recommendation placements with their bound recipe, enabled flag, and settings | | `update_placement` | Update one placement's recipe, enabled flag, label, or settings (partial update) | ### Serving status and analytics | Action | Description | |--------|-------------| | `get_serving_status` | One-call overview: search, placements, post-purchase, and quota state | | `get_serve_stats` | Daily serves, clicks, adds, and checkouts for one search or recommendation recipe | | `get_serve_usage` | Monthly serve usage against your plan quota | ## Action reference Every action is sent as a JSON body with an `"action"` field. Below are the parameters for each. ### list_collections ```json { "action": "list_collections" } ``` No required parameters. Returns an array of collections with ID, title, enabled status, current recipe, product count, and last sort time. ### get_collection ```json { "action": "get_collection", "collection_id": 123456789 } ``` | Parameter | Required | Description | |-----------|----------|-------------| | `collection_id` | Yes | Shopify collection ID | ### enable_collection / disable_collection ```json { "action": "enable_collection", "collection_id": 123456789 } ``` | Parameter | Required | Description | |-----------|----------|-------------| | `collection_id` | Yes | Shopify collection ID | ### update_collection ```json { "action": "update_collection", "collection_id": 123456789, "metrics_id": 1, "revert_sorting": "best-selling" } ``` | Parameter | Required | Description | |-----------|----------|-------------| | `collection_id` | Yes | Shopify collection ID | | `metrics_id` | Yes | Recipe ID to assign (use `list_recipes` to find IDs) | | `revert_sorting` | No | Sort order to revert to when disabled. Options: `manual`, `best-selling`, `alpha-asc`, `alpha-desc`, `price-asc`, `price-desc`, `created-desc`, `created-asc` | ### bulk_toggle_collections ```json { "action": "bulk_toggle_collections", "collection_ids": [123456789, 987654321], "status": 1 } ``` | Parameter | Required | Description | |-----------|----------|-------------| | `collection_ids` | Yes | Array of Shopify collection IDs | | `status` | Yes | `1` to enable, `0` to disable | ### bulk_assign_recipe ```json { "action": "bulk_assign_recipe", "collection_ids": [123456789, 987654321], "metrics_id": 1, "revert_sorting": "best-selling" } ``` | Parameter | Required | Description | |-----------|----------|-------------| | `collection_ids` | Yes | Array of Shopify collection IDs | | `metrics_id` | Yes | Recipe ID to assign | | `revert_sorting` | No | Revert sort order | ### sort_collection ```json { "action": "sort_collection", "collection_id": 123456789 } ``` Triggers an immediate sort. The collection must be enabled with a recipe assigned. ### revert_collection ```json { "action": "revert_collection", "collection_id": 123456789 } ``` Reverts the collection to its configured revert sort order. ### list_recipes ```json { "action": "list_recipes", "recipe_type": "collection" } ``` | Parameter | Required | Description | |-----------|----------|-------------| | `recipe_type` | No | `collection` (default), `recommendation`, or `search` | Returns the recipes of that type with their ID, name, attribute weights, and usage. Collection recipes report the number of collections using them; search recipes include `is_active` marking the one currently re-ranking search results. ### list_products ```json { "action": "list_products" } ``` Returns products with boost values, enabled status, options, and current sort settings. ### get_product ```json { "action": "get_product", "product_id": 123456789 } ``` Returns detailed info about a single product including all its options and their sorting configuration. ### set_product_boost ```json { "action": "set_product_boost", "product_id": 123456789, "boost": 50 } ``` | Parameter | Required | Description | |-----------|----------|-------------| | `product_id` | Yes | Shopify product ID | | `boost` | Yes | Integer added to the product's ranking score. Positive = boost up, negative = push down, `0` = no boost | ### enable_product Enables option sorting on a product. Option sorting reorders the variant options (like Color or Size) within a single product based on performance data. ```json { "action": "enable_product", "product_id": 123456789, "options": [ { "option_id": 111, "option_name": "Color", "sort_type": "sales", "sold_out": "bottom", "direction": "desc", "days": "30" } ] } ``` | Parameter | Required | Description | |-----------|----------|-------------| | `product_id` | Yes | Shopify product ID | | `options` | No | Array of option sorting configurations (see below) | **Option configuration fields:** | Field | Required | Description | |-------|----------|-------------| | `option_id` | Yes | The option ID from the product (use `get_product` to find these) | | `option_name` | Yes | The option name (e.g. "Color", "Size") | | `sort_type` | Yes | Sort method, see table below | | `sold_out` | No | Where to place sold-out variants: `bottom` (default), `top`, or `ignore` | | `direction` | No | Sort direction: `desc` (default) or `asc` | | `days` | No | Time window for sales/revenue sorts: `7`, `30` (default), `60`, `90`, `365`, or `all` | | `csv_pattern` | No | Custom order for `comma_separated` sort type (e.g. `"Red,Blue,Green"`) | | `common_size` | No | Size system for `common_sizes` sort type (e.g. `"us_apparel"`, `"us_shoes"`) | **Available sort types:** | Sort type | What it sorts by | |-----------|-----------------| | `off` | No sorting for this option | | `alphabetical` | Alphabetical order | | `sales` | Units sold (within the time window) | | `revenues` | Revenue generated | | `prices` | Variant price | | `compare_at_prices` | Compare-at price | | `costs` | Cost per item | | `inventories` | Available inventory | | `margins` | Profit margin | | `discount_amounts` | Discount amount | | `discount_percentages` | Discount percentage | | `numeric` | Numeric value in the option name | | `variant_ages` | How recently the variant was added | | `variants_in_stock` | In-stock status | | `comma_separated` | Custom order defined by `csv_pattern` | | `common_sizes` | Standard size ordering (S, M, L, XL, etc.) | ### disable_product ```json { "action": "disable_product", "product_id": 123456789 } ``` Disables option sorting on the product. ### sort_product ```json { "action": "sort_product", "product_id": 123456789 } ``` Triggers an immediate re-sort of the product's options using its saved configuration. The product must be enabled with option sorting configured. > **Sort after enabling** > > After enabling a product with option sorting, call `sort_product` to apply the sort immediately. Otherwise, the sort will happen on the next scheduled cron run. ### get_search_serving ```json { "action": "get_search_serving" } ``` Returns your search recipes, the active recipe ID, whether the storefront is connected, and the current display settings. Search re-ranking needs three things to serve: an active search recipe, a storefront connection, and the Dynasort search blocks added to your theme in the theme editor. The API manages the first two; the theme step happens in the Shopify admin. See the [search re-ranking guide](https://docs.dynasort.io/search-re-ranking/) for the theme setup. ### set_search_recipe ```json { "action": "set_search_recipe", "metrics_id": 42 } ``` | Parameter | Required | Description | |-----------|----------|-------------| | `metrics_id` | Yes | A search recipe ID from `list_recipes` with `recipe_type` `"search"`. Use `0` to turn search re-ranking off | Search uses exactly one active recipe; setting a new one deactivates the previous one. IDs that are not search recipes are rejected without changing anything. ### update_search_settings ```json { "action": "update_search_settings", "settings": { "layout": { "columns": { "mobile": 2, "tablet": 3, "desktop": 4 }, "per_page": 24 }, "fields": { "swatches": true, "badges": true, "rating": true, "inline_add": true } } } ``` This is a **partial update**: only the keys you send change, everything else keeps its current value. Limits: columns mobile 1 to 3, tablet 2 to 4, desktop 2 to 6; per_page 8 to 48. ### connect_search_storefront ```json { "action": "connect_search_storefront" } ``` Provisions (or reuses) the Storefront API access token that search serving uses to read which products match a query. Idempotent; safe to call again. ### list_placements ```json { "action": "list_placements" } ``` Returns every recommendation placement with its bound recipe, enabled flag, label, and full presentation settings. Placement keys: `product-page`, `cart`, `collection`, `home`, `post-purchase`, and `custom-1` through `custom-5`. ### update_placement ```json { "action": "update_placement", "placement_key": "product-page", "recipe_id": 42, "enabled": 1, "settings": { "layout": { "columns": { "desktop": 4 } }, "fields": { "badges": { "sale": true } } } } ``` | Parameter | Required | Description | |-----------|----------|-------------| | `placement_key` | Yes | One of the keys from `list_placements` | | `recipe_id` | No | A recommendation recipe ID from `list_recipes` with `recipe_type` `"recommendation"`. Use `0` to unbind | | `enabled` | No | `1` or `0` | | `label` | No | Display label, mainly for custom placements | | `settings` | No | **Partial** presentation settings object, merged over the placement's current settings. See `list_placements` output for the full schema | A newly bound recipe starts serving within a few minutes. For the `post-purchase` placement only a subset of settings applies: `layout.columns.desktop` (products shown), `layout.min_to_render`, and the sale badge toggle; checkout styles the cards itself. ### get_serving_status ```json { "action": "get_serving_status" } ``` A cheap one-call overview: the active search recipe and storefront connection, how many recommendation placements are enabled, whether post-purchase is bound, and a `quota_over` notice when the monthly serve quota is exhausted. ### get_serve_stats ```json { "action": "get_serve_stats", "recipe_id": 42, "days": 30 } ``` | Parameter | Required | Description | |-----------|----------|-------------| | `recipe_id` | Yes | A search or recommendation recipe ID | | `days` | No | Reporting window, default 30. Clamped to your plan's analytics depth; the response reports both `window_days` and `plan_days` | Returns per-day serves, clicks, inline adds, attributed cart adds, and checkouts, plus window totals. Today's numbers are live; past days come from the nightly rollup. ### get_serve_usage ```json { "action": "get_serve_usage" } ``` Returns `used`, `quota` (with `unlimited: true` when your plan has no cap), the current `month`, and `resets_on`. ## Managing API keys - **One active key at a time.** If you need to rotate your key, revoke the current one first, then generate a new one. - **Revoking a key is immediate.** Any requests using the old key will fail with a `401 unauthorized` error as soon as the key is revoked. - **Keys don't expire.** An active key stays valid until you revoke it manually. - **Key history is preserved.** Revoked keys remain visible in the Connector page with a "Revoked" badge so you have an audit trail. ## Frequently asked questions **Q: What is the Dynasort Connector?** A REST-style API for programmatic access to Dynasort. It covers collection sorting, option sorting, search re-ranking, product recommendations and post-purchase offers, and is designed so assistants such as Claude or ChatGPT can manage your setup from a conversation. **Q: Which plans include the Connector API?** Pro and Enterprise. On Demo and Basic the Connector page is visible but API key generation is disabled until you upgrade. **Q: How do I connect an assistant to Dynasort?** Click Copy Prompt on the Connector page, paste it into the assistant as a system message or at the start of a conversation, and provide your dyn_sk_ API key when asked. The prompt contains your store URL, the endpoint, authentication instructions and every available action. **Q: How do I call the API directly?** Send a POST request with a JSON body to https://dynasort.immersiveecommerce.com/api/v1/ with the header Authorization: Bearer and your key. Every request names an action, for example {"action": "list_collections"}, and responses are JSON with a success or error flag. **Q: What are the API rate limits?** 60 requests per minute per store. Every response carries X-RateLimit-Limit, X-RateLimit-Remaining and X-RateLimit-Reset headers, and exceeding the limit returns HTTP 429 with a Retry-After header. **Q: Which actions does the API support?** 25 actions in six groups: collections (list, get, enable, disable, update, bulk toggle, bulk assign recipe, sort, revert), recipes (list by type), products (list, get, set boost, enable and disable option sorting, sort), search (get serving, set recipe, update settings, connect storefront), placements (list, update) and analytics (serving status, serve stats, serve usage). **Q: Can I have more than one API key?** No. Only one key is active at a time. To rotate, revoke the current key and generate a new one. Revocation is immediate, keys never expire on their own, and revoked keys stay listed for an audit trail. **Q: Can I recover a lost API key?** No. The full key is shown exactly once at generation and Dynasort stores only a hash. Revoke the lost key and generate a new one. --- # Settings URL: https://docs.dynasort.io/settings/ Configure processing schedules, notifications, and issue reporting. Dynasort provides flexible settings to control processing, notifications, and issue reporting. ## Processing Settings - Enable/disable processing - Processing schedule (days of week) - Processing hours (all day or specific hours) ## Traffic in Insights - Shoppers (recommended): people plus shopping agents, bots left out - People only: bots and shopping agents left out - All traffic: every visit, bots included - A summary of the bot and shopping-agent sessions found in the last 7 days Changing this rebuilds your Insights within a few minutes. It never changes your sort order. See [Bot and Agent Traffic](https://docs.dynasort.io/bot-traffic/). ## Insights Notifications - Email recipients - Report frequency (daily/weekly/monthly) - Report timeframe (number of days) ## Issues Reporting - Email frequency - Email recipients - Above-the-fold product count - Low product count threshold ## Managing Settings 1. Navigate to Settings. 2. Adjust processing, Insights, or issue reporting. 3. Save changes. ## Frequently asked questions **Q: What does the processing switch in Settings do?** It is the master switch for all Dynasort sorting. When it is off, no collection is re-sorted regardless of its own settings. Turn it on to start, and use it to pause the whole store at once. **Q: Can I restrict sorting to certain days or hours?** Yes. Choose the days of the week processing runs and either all day or a window of specific hours, for example to avoid re-sorting during a launch. **Q: Where do I configure Insights report emails?** In the Insights Notifications section of Settings: add recipients, pick daily, weekly or monthly frequency and set the number of days each report covers. **Q: What are the above-the-fold and low product count settings?** They tune Collection Issues detection. Above-the-fold is how many products count as visible before scrolling; the low product count threshold is the size below which a collection is flagged as thin. **Q: What does Traffic in Insights do?** It chooses which sessions your Insights count: Shoppers (people plus shopping agents, the default), People only, or All traffic including bots. It changes Insights only; sorting never uses bot visits. See Bot and Agent Traffic. --- # Attributes URL: https://docs.dynasort.io/attributes/ Attributes are the building blocks for sorting, filtering, and managed collection conditions. Attributes are the building blocks of Dynasort’s collection sorting and managed collections functionality. They define how products are ranked, filtered, and prioritized based on key data points. ## Multiple Attribute Instances You can use multiple instances of the same attribute for flexibility. For example: - A Managed Collection could include “Price greater than $20” and “Price less than $100” to select products within a range. - A Recipe could include full size run conditions for both size and color. ## Attribute Availability Not all attributes are available for both Collection Sorting and Managed Collections. Dynasort assigns badges to indicate where each attribute can be used: - Collection Sorting - Managed Collections - Partner Attributes ## Data Evaluation Badges Attributes can also indicate how their data is evaluated: - Numeric range - String matching - Boolean (true/false) ## How Attributes Work in Dynasort 1. Collection Sorting: Attributes are weighted within a Recipe to determine ranking. 2. Managed Collections: Attributes act as conditions to filter product inclusion. 3. Combination use: Many attributes can be used in both. ## Frequently asked questions **Q: What is an attribute in Dynasort?** A single data point about a product that Dynasort can score or test: sales, conversion rate, price, margin, inventory, tags, review ratings, metafields and more. Attributes are weighted inside recipes to rank products and used as conditions to build managed collections. **Q: Where can each attribute be used?** Each attribute carries badges showing whether it works in Collection Sorting recipes, Managed Collection conditions, or both. Partner attributes are the review-platform ratings read from apps such as Yotpo and Judge.me. **Q: What do the numeric range, string matching and boolean badges mean?** They describe how the value is evaluated. Numeric range attributes score on a scale between a minimum and maximum, string matching attributes test text such as title or tag with equals or contains, and boolean attributes are true or false, such as Sold Out or On Sale. **Q: How are numeric attributes scored in a recipe?** On a linear scale between the Min and Max you set: at or below Min a product earns zero points from that attribute, at or above Max it earns the full point weight, and in between points scale proportionally. Attributes where lower is better are scored in reverse: bounce rate, bounces, exit rate, exits and the product age attributes, where newer earns more. **Q: Can I use the same attribute twice?** Yes. A managed collection can combine 'Price greater than $20' and 'Price less than $100' for a range, and a recipe can hold two instances with different weights or timeframes. **Q: How many attributes does Dynasort offer?** Nearly fifty, covering sales and revenue, shopper behaviour, price and margin, stock and size availability, product age, catalog text fields, metafields and ratings from ten review platforms. Each has its own page under this section. --- # Add To Cart Rate URL: https://docs.dynasort.io/attributes/add-to-cart-rate/ Rank products by the share of product views that turn into an add-to-cart in a chosen timeframe. ## Add To Cart Rate Percentage of product views that result in an add-to-cart action. ## Frequently asked questions **Q: What does the Add To Cart Rate attribute measure?** The percentage of a product's page views that led to an add-to-cart action within the timeframe you choose. A product viewed 200 times and added 20 times has a 10% add-to-cart rate. **Q: Why use Add To Cart Rate instead of the Added To Cart count?** Because the rate corrects for traffic. A product low in a collection gets fewer views, so a raw count favours whatever is already on top; the rate surfaces products that convert well even with less exposure. **Q: How is Add To Cart Rate scored in a recipe?** On a linear scale between the Min and Max percentages you set: at or below Min a product earns nothing from the attribute, at or above Max it earns the full point weight, and in between points scale proportionally. --- # Added To Cart URL: https://docs.dynasort.io/attributes/added-to-cart/ Sort Shopify collections by how many times each product was added to cart in a chosen timeframe. ## Added To Cart Number of times a product has been added to cart in a given timeframe. ## Frequently asked questions **Q: What does the Added To Cart attribute measure?** The number of times a product was added to a cart on your storefront within the timeframe you choose. It is a count, so products with more add-to-cart events earn more points in a recipe. **Q: Where does Dynasort get add-to-cart data?** From shopper events Dynasort collects on your storefront after install. The count grows as traffic accumulates, and catalog attributes carry the sorting until it does. **Q: How is Added To Cart different from Add To Cart Rate?** Added To Cart is the raw count of add-to-cart events. Add To Cart Rate divides that count by product views, so it rewards products that convert interest into carts rather than products that simply get the most traffic. --- # Age Of Newest Variant URL: https://docs.dynasort.io/attributes/age-of-newest-variant/ Rank products by how many days ago their newest variant was added, so restocked or extended styles surface again. ## Age Of Newest Variant Age of the newest variant added to a product as expressed in a number of days. Variant age is calculated from the current day backwards, e.g. a product with a new variant a week ago would have a Age Of Newest Variant equal to 7, even if the product was published long ago. ## Frequently asked questions **Q: What does Age Of Newest Variant measure?** How many days ago the newest variant was added to a product, counted back from today. A product that received a new variant a week ago has a value of 7, even if the product itself was published long ago. **Q: When should I use Age Of Newest Variant instead of Product Created Age?** When restocks or extensions matter more than the original launch date. A new colour or size added to an old style makes it 'new again' by this attribute, while Product Created Age still treats it as old. **Q: Does a newer variant score higher?** Yes. Age attributes are scored in reverse: a product whose newest variant is at or below your Min day count earns the full point weight, one at or above Max earns nothing, and ages in between earn proportionally. Set Max to the number of days after which a new variant should stop counting as new. --- # Back In Stock URL: https://docs.dynasort.io/attributes/back-in-stock/ Give recently restocked products a boost in your collections, or build a managed collection of everything that just came back in stock. The Back In Stock attribute rewards products that recently came back in stock. Shoppers who saw an item sell out are often waiting for it to return, and restocked items convert well while that demand is fresh. This attribute lets you surface them automatically, either by boosting them inside a sorted collection or by collecting them into a dedicated "Back In Stock" managed collection. **Available for:** Collection Sorting (Recipes) and Managed Collections. ## How it works Dynasort continuously tracks your inventory levels and records a restock event whenever an item crosses from out of stock back to in stock. A product earns this attribute's points when it has a qualifying restock event inside your chosen timeframe. Two settings control what counts as a qualifying restock: the detection mode and the minimum restock quantity. ### Detection mode - **Entire product back in stock**: the product's total inventory across all variants was at zero (the product was fully unbuyable), and now has stock again. This is the default, and matches what most shoppers mean by "it's back." - **Any variant back in stock**: any single variant crossed from zero to positive, even if other variants still had stock. Use this when individual variants matter more than the product as a whole, for example when a popular size returning is itself worth promoting. Expect this mode to fire more often, since stores that cycle sizes in and out of stock will produce frequent variant-level events. ### Minimum restock quantity Restocks smaller than this quantity are ignored. This is the filter that keeps returns and exchanges from triggering the attribute: a customer return typically puts one or two units back into inventory, while a real restock adds many. The default of 3 works for most stores; if your typical restock is large, raising it makes the signal even cleaner. > **Choosing a minimum quantity** > > Set it just above the largest quantity a single return or exchange would add. If customers usually buy one unit at a time, 2 or 3 is enough. If you sell multi-packs or customers often return several units together, go higher. ## Configuration [Image: Back In Stock attribute editor showing the restock detection mode dropdown and minimum restock quantity field] | Setting | What it does | Default | |---|---|---| | Timeframe | How recently the restock must have happened (24 hours to 90 days) | 30 days | | Mode | Entire product vs. any variant (see above) | Entire product | | Minimum restock quantity | Restocks below this quantity are ignored | 3 | In a recipe, the attribute is all-or-nothing: a product with a qualifying restock inside the timeframe earns the attribute's full point weight, and every other product earns zero. There is no sliding scale, so the points act as a flat boost layered on top of your other attributes. ## Using it in a Managed Collection As a managed collection condition, Back In Stock reads as: > Back In Stock *[operator]* *[quantity]* in the last *[timeframe]* For example, "Back In Stock greater than 5 in the last 7 days" selects products that came back in stock within the past week with more than 5 units. Only products that actually had a restock event in the window are candidates; the quantity comparison applies to the largest restock the product had during that time. This makes a self-maintaining "Back In Stock" collection a one-condition setup: products join when they restock and drop out automatically once the event ages past your timeframe. ## Methodology and notes - **Out of stock** means total inventory at or below zero. Negative inventory (from "continue selling when out of stock") counts as out of stock. - Variants that do not track inventory are ignored entirely, so untracked items can never trigger a restock event. - Inventory is checked on your plan's regular processing schedule, so a restock is typically detected within minutes to about an hour of happening in Shopify. On lower-tier plans with longer processing intervals, detection can occasionally take slightly longer. - Restock history begins when the feature launched (June 2026). Longer timeframes like 60 or 90 days only become fully meaningful once that much history has accumulated. - A product that restocks and then sells out again still scores until the restock event ages out of your timeframe. If you want sold-out products pushed down regardless, your recipe's sold-out handling takes care of that as usual. ## Tips - Pair Back In Stock with behavioral attributes like Product Views or Added To Cart: a restocked product that shoppers were already engaging with is the strongest candidate for a top spot. - Short timeframes (3 to 7 days) keep the boost focused on genuinely fresh restocks; long timeframes turn it into a gentler, broader signal. - You can add multiple instances of this attribute to one recipe, for example a high-weight 3-day instance plus a low-weight 30-day instance, so the boost decays in steps as the restock ages. ## Frequently asked questions **Q: What counts as a back-in-stock event in Dynasort?** An inventory crossing from zero to positive, detected on your plan's regular processing schedule. In the default 'entire product' mode the product's total inventory across all variants must have been at zero; in 'any variant' mode a single variant returning is enough. **Q: How does Dynasort keep customer returns from triggering Back In Stock?** With the minimum restock quantity setting. Restocks smaller than that quantity are ignored, and the default of 3 is above what a typical return or exchange adds back. **Q: How is Back In Stock scored in a recipe?** All or nothing. A product with a qualifying restock inside your timeframe, from 24 hours to 90 days, earns the attribute's full point weight; every other product earns zero. Add two instances with different timeframes and weights to make the boost decay in steps. **Q: Can I build a Back In Stock collection automatically?** Yes. As a managed collection condition it reads 'Back In Stock greater than 5 in the last 7 days', for example. Products join when they restock and drop out when the event ages past the timeframe. **Q: How quickly is a restock detected?** Usually within minutes to about an hour of the change in Shopify, matching your plan's processing interval. Variants that do not track inventory never trigger a restock event, and restock history begins in June 2026 when the feature launched. --- # Bounce Rate URL: https://docs.dynasort.io/attributes/bounce-rate/ Demote products whose page visitors leave without viewing anything else. Scored as inverse points, so lower is better. ## Bounce Rate Percentage of visitors who leave after viewing only a product and do not visit any other pages in their session during a set timeframe. **Note:** Bounce rates are calculated as inverse points since a lower bounce rate is a better outcome. For example, if an attribute bounce rate is set with a minimum of 10% and a maximum of 50%, a product with a 10% bounce rate or below will be awarded full points value, a product with 50% or above will be awarded no points, and products with bounce rates between 10% and 50% will be awarded a proportional point value. ## Frequently asked questions **Q: What does the Bounce Rate attribute measure?** The percentage of visitors who viewed a product page and left without visiting any other page in their session, within the timeframe you choose. **Q: Is a higher bounce rate better or worse for ranking?** Worse. Bounce Rate is scored as inverse points: with a Min of 10% and a Max of 50%, a product at or below 10% earns full points, one at or above 50% earns none, and rates in between earn proportionally. **Q: How is Bounce Rate different from Exit Rate?** A bounce is a single-page session that started and ended on the product page. An exit is any session that ended on the product page, however many pages came before it. --- # Bounces URL: https://docs.dynasort.io/attributes/bounces/ Demote products by the number of single-page sessions they cause in a timeframe. Scored as inverse points, so lower is better. ## Bounces Total number of visitors who leave after viewing only a product and do not visit any other pages in their session during a set timeframe. **Note:** Bounces are calculated as inverse points since a lower number of bounces is a better outcome. For example, if attribute bounces are set with a minimum of 10 and a maximum of 50, a product with a 10 bounces or below will be awarded full points value, a product with 50 or above will be awarded no points, and products with bounces between 10 and 50 will be awarded a proportional point value. ## Frequently asked questions **Q: What does the Bounces attribute measure?** The total number of visitors who viewed a product and left the store without visiting any other page in the session, within the timeframe you choose. **Q: Are more bounces good or bad for a product's rank?** Bad. Bounces are scored as inverse points: with a Min of 10 and a Max of 50, a product with 10 or fewer bounces earns full points, one with 50 or more earns none, and counts in between earn proportionally. **Q: Should I use Bounces or Bounce Rate?** Use Bounce Rate to compare products fairly regardless of traffic. Use the Bounces count when you specifically want to demote high-traffic pages that lose the most visitors in absolute terms. --- # Compare At Price URL: https://docs.dynasort.io/attributes/compare-at-price/ Sort by the original pre-discount price of a product, averaged across variants when they differ. ## Compare At Price Original price before a discount, if set. If product variants have varying values, an average of the variants’ compare at prices is used. ## Frequently asked questions **Q: What does the Compare At Price attribute use?** The product's original price before a discount, as set in the Shopify compare-at price field. When variants have different compare-at prices, Dynasort uses the average across the variants. **Q: What happens when no compare-at price is set?** The product has no original price to compare against, so it earns nothing from this attribute. To boost discounted products regardless of amount, use On Sale, which is a simple true or false. **Q: Can I rank by discount depth?** Combine Compare At Price with Price in one recipe, or use Compare At Price in a managed collection condition to select products above a given original price. --- # Continue Selling When Out of Stock URL: https://docs.dynasort.io/attributes/continue-selling/ Boost (or demote) products that are set to keep selling once their inventory hits zero, or gather them into a managed collection. The Continue Selling When Out of Stock attribute identifies products that Shopify will keep selling after their inventory reaches zero. These are typically made-to-order items, pre-orders, dropshipped products, or digital goods, things you can fulfill regardless of the stock count. This attribute lets you treat them differently from the rest of your catalog, either by boosting them so they never get buried, or by gathering them into a dedicated managed collection. **Available for:** Collection Sorting (Recipes) and Managed Collections. ## How it works In Shopify, each product variant has an "Continue selling when out of stock" setting. When it is on, customers can keep buying that variant even after its quantity drops to zero. A product earns this attribute when **any one of its variants** has that setting turned on. You do not need every variant to continue selling, a single qualifying variant is enough for the whole product to score. This matches how merchants usually think about it: if a product can still be ordered in some form, it counts. > **It reflects the current setting, not sales history** > > This attribute looks at how your variants are configured right now, not at whether anything has actually sold past zero. A product qualifies the moment a variant is set to continue selling, even if it still has plenty of stock. ## Configuration [Image: The Continue Selling When Out of Stock attribute editor, with a breakdown of how many products in the catalog continue selling versus stop selling when out of stock] There is nothing to configure beyond the point weight. Like other yes/no attributes, it is all-or-nothing: a product with at least one continue-selling variant earns the attribute's full point weight, and every other product earns zero. The attribute's page also shows a breakdown of your catalog: how many products continue selling when out of stock versus how many stop selling. This is a quick way to gauge how much of your store the attribute will affect before you add it to a recipe. | Setting | What it does | Default | |---|---|---| | Points | The weight added when the product qualifies | Your choice | Use a **positive** weight to push continue-selling products up (useful when those are your evergreen, always-available items you want shoppers to find first). Use a **negative** weight to push them down (useful if you would rather lead with products that have real, countable stock on hand). ## Using it in a Managed Collection As a managed collection condition, it reads as a simple true/false test: [Image: A managed collection condition set to "Continue selling when out of stock" is "True"] > Continue Selling When Out of Stock is *[true / false]* - **true** selects every product with at least one continue-selling variant. - **false** selects products where no variant is set to continue selling. This makes a self-maintaining "Always Available" collection a one-condition setup: products join as soon as a variant is set to continue selling, and drop out if that setting is later turned off. ## Methodology and notes - The check is at the **variant level, combined to the product**: one qualifying variant marks the whole product. A product with twenty variants where only one continues selling still qualifies. - It is independent of current stock. A continue-selling product qualifies whether it is sitting at 500 units or already at zero. - This attribute is about the *continue selling* setting specifically. If your goal is to push genuinely out-of-stock items down, use the Sold Out attribute instead; the two are complementary and can be combined in one recipe. - Newly installed stores and recently changed products reflect the latest setting on the next regular processing cycle, so a change made in Shopify is picked up within the normal sync window for your plan. ## Tips - Pair a positive weight with your behavioral attributes so always-available products that shoppers also engage with rise to the top, while letting genuinely scarce in-stock items still compete on their own merits. - If you dropship or make items to order, a managed "Always Available" collection built on this condition gives shoppers a browsable shelf of everything you can fulfill at any time. - Combine it with Sold Out in a single recipe to express a clear priority: surface products that are either in stock or can still be ordered, and push down only the ones that are truly unavailable. ## Frequently asked questions **Q: What does the Continue Selling When Out of Stock attribute identify?** Products where at least one variant has Shopify's 'Continue selling when out of stock' setting turned on, typically made-to-order, pre-order, dropshipped or digital items that can still be bought at zero inventory. **Q: Does every variant need the setting for the product to qualify?** No. A single qualifying variant marks the whole product. A product with twenty variants where one continues selling still counts. **Q: Does this attribute look at stock levels or sales?** Neither. It reflects the current variant configuration only. A product qualifies the moment a variant is set to continue selling, whether it has 500 units or zero. **Q: How is it scored, and can the weight be negative?** All or nothing: a qualifying product earns the full point weight and every other product earns zero. Use a positive weight to keep always-available products visible, or a negative weight to lead with products that have countable stock. **Q: How do I build an Always Available collection?** Create a managed collection with the single condition 'Continue Selling When Out of Stock is true'. Products join when a variant is set to continue selling and leave when that setting is turned off. --- # Conversion Rate (CX) URL: https://docs.dynasort.io/attributes/conversion-rate/ Rank products by the percentage of product sessions that end in a purchase. ## Conversion Rate (CX) Percentage of product sessions that result in a purchase. ## Frequently asked questions **Q: What does the Conversion Rate (CX) attribute measure?** The percentage of sessions that viewed a product and ended in a purchase, within the timeframe you choose. It is the most direct signal of which products turn interest into orders. **Q: How is Conversion Rate different from Conversions and Sales?** Conversion Rate is a percentage of sessions. Conversions is the count of sessions with a checkout, and Sales is units sold. A product with few visits but a high conversion rate can outrank a heavily viewed product that rarely sells. **Q: Does Conversion Rate work on a new store?** It needs collected shopper sessions, so it starts at zero and improves as traffic accumulates. Pair it with catalog attributes such as sales, inventory or price so the recipe still sorts sensibly from day one. --- # Conversions URL: https://docs.dynasort.io/attributes/conversions/ Rank products by the number of sessions in which they were viewed and a checkout took place. ## Conversions The number of sessions that a product is both viewed and a checkout takes place in a given timeframe. **Note:** this number may vary from Sales (units sold) as is disregards line item quantities. ## Frequently asked questions **Q: What does the Conversions attribute count?** The number of sessions in which a product was viewed and a checkout took place, within the timeframe you choose. Each session counts once regardless of quantity. **Q: Why do Conversions and Sales differ?** Conversions ignores line item quantities. A checkout with 100 units of one product in a line item is 100 Sales but only 1 conversion. **Q: When should I rank by Conversions?** When you want to reward how many buying sessions a product is part of rather than volume, which stops a single bulk order from dominating a best-sellers sort. --- # Cost URL: https://docs.dynasort.io/attributes/cost/ Sort by the average Shopify cost value across all of a product's variants. ## Cost The average cost value as set in Shopify for all of a product’s variants. ## Frequently asked questions **Q: What does the Cost attribute use?** The 'cost per item' value set in Shopify, averaged across all of a product's variants. **Q: What if cost is not filled in on my products?** Products without a cost in Shopify have nothing to score, and Margin cannot be calculated for them either. Fill in cost per item on the variant in Shopify and Dynasort picks it up on the next sync. **Q: How would I use Cost in sorting?** Usually indirectly through Margin. Cost on its own is useful in a managed collection condition, for example to gather high-cost items into a premium collection or exclude them from a clearance one. --- # Debutify URL: https://docs.dynasort.io/attributes/debutify/ Use Debutify review counts and product ratings as a sorting signal in Shopify collections. ## Debutify Review counts and product ratings from the [Debutify](https://debutify.com/) platform. ## Frequently asked questions **Q: What Debutify data can Dynasort sort by?** The product rating and the review count that Debutify Reviews writes to your Shopify products. Both are available as attributes you can weight in a recipe. **Q: Do I need to connect Debutify to Dynasort?** No. Dynasort reads the product metafields Debutify already writes to Shopify, so there is no API key, export or extra setup. Keep using Debutify as normal. **Q: How should I weight review data in a recipe?** Weight both rating and review count so a product with one perfect review does not outrank a proven seller with hundreds of reviews, and blend them with sales, margin or inventory so stars are not the only signal. See Integrations. --- # Exit Rate URL: https://docs.dynasort.io/attributes/exit-rate/ Demote products whose pages are where visitors leave the store. Scored as inverse points, so lower is better. ## Exit Rate Percentage of visitors who leave the store from a product page. **Note:** Exit rates are calculated as inverse points since a lower exit rate is a better outcome. For example, if an attribute exit rate is set with a minimum of 10% and a maximum of 50%, a product with a 10% exit rate or below will be awarded full points value, a product with 50% or above will be awarded no points, and products with exit rates between 10% and 50% will be awarded a proportional point value. ## Frequently asked questions **Q: What does the Exit Rate attribute measure?** The percentage of visitors whose session ended on the product's page, meaning they left the store from there, within the timeframe you choose. **Q: Is a high exit rate good or bad for ranking?** Bad. Exit Rate is scored as inverse points: with a Min of 10% and a Max of 50%, a product at or below 10% earns full points, one at or above 50% earns none, and rates in between earn proportionally. **Q: How is Exit Rate different from Bounce Rate?** Every bounce is an exit but not every exit is a bounce. Bounce Rate counts only single-page sessions; Exit Rate counts every session that ended on the page after any number of earlier pages. --- # Exits URL: https://docs.dynasort.io/attributes/exits/ Demote products by the number of visitors who leave the store from their page. Scored as inverse points, so lower is better. ## Exits Total number of visitors who leave after viewing a product during a set timeframe. **Note:** Exits are calculated as inverse points since a lower number of exits rate is a better outcome. For example, if attribute exits are set with a minimum of 10 and a maximum of 50, a product with a 10 eixts or below will be awarded full points value, a product with 50 or above will be awarded no points, and products with exits between 10 and 50 will be awarded a proportional point value. ## Frequently asked questions **Q: What does the Exits attribute count?** The total number of visitors whose session ended on the product's page within the timeframe you choose. **Q: Do more exits lower a product's rank?** Yes. Exits are scored as inverse points: with a Min of 10 and a Max of 50, a product with 10 or fewer exits earns full points, one with 50 or more earns none, and counts in between earn proportionally. **Q: Should I use Exits or Exit Rate?** Use Exit Rate to compare products fairly regardless of traffic. Use the Exits count when you want to demote the pages that lose the most visitors in absolute numbers. --- # Full Size Run URL: https://docs.dynasort.io/attributes/full-size-run/ Boost products that have at least one variant of every size, or any other option set, in stock. ## Full Size Run Whether a product has at at least one variant of each size in stock. **Note:** Though we refer to this as a full size run, different option sets may be selected such as color, size, or any other single option. ## Frequently asked questions **Q: What does the Full Size Run attribute check?** Whether a product has at least one variant of every size in stock. It is a true or false test, so a product either earns the full point weight or nothing. **Q: Does it only work for sizes?** No. You choose the option set, so it works for colour, width, style or any single variant option. Add one instance for size and another for colour to require both. **Q: How is Full Size Run different from Sizes In Stock?** Full Size Run is all or nothing. Sizes In Stock is the percentage of sizes available, so a product missing one size still earns partial credit. --- # Has Image URL: https://docs.dynasort.io/attributes/has-image/ Score products by whether they have a featured image, with negative values to demote products without one. ## Has Image Whether or not a product has a main featured image published for the product or not. Negative values are accepted to demote products without an image. ## Frequently asked questions **Q: What does the Has Image attribute check?** Whether the product has a main featured image published. It is a true or false test. **Q: How do I push products without images to the bottom?** Give Has Image a negative point value. Negative values are accepted specifically so products missing an image are demoted rather than products with an image being boosted. **Q: Why sort by image at all?** Products without a featured image look broken on a collection grid and rarely convert. Demoting them keeps the visible top of every collection clean without removing the products. --- # Helpful Crowd URL: https://docs.dynasort.io/attributes/helpful-crowd/ Use Helpful Crowd review counts and product ratings as a sorting signal in Shopify collections. ## Helpful Crowd Review counts and product ratings from the [Helpful Crowd](https://www.helpfulcrowd.com/) platform. ## Frequently asked questions **Q: What Helpful Crowd data can Dynasort sort by?** The product rating and the review count that Helpful Crowd writes to your Shopify products, both available as attributes you can weight in a recipe. **Q: Do I need to connect Helpful Crowd to Dynasort?** No. Dynasort reads the product metafields Helpful Crowd already writes to Shopify, so there is no API key, export or extra setup. **Q: How should I weight review data in a recipe?** Weight both rating and review count so a product with one perfect review does not outrank a proven seller with hundreds of reviews, and blend them with sales, margin or inventory. See Integrations. --- # Inventory Quantity URL: https://docs.dynasort.io/attributes/inventory-quantity/ Sort by the total inventory in stock across all of a product's variants. ## Inventory Quantity Sum of all inventory in stock across a product’s variants. ## Frequently asked questions **Q: What does the Inventory Quantity attribute use?** The sum of inventory in stock across all of a product's variants, as tracked in Shopify. **Q: Why rank by inventory quantity?** Products with deep stock can absorb the demand a top position creates, while promoting a product with two units left risks selling out mid-day. It is also the standard way to sell down overstock. **Q: Can I count inventory at one warehouse only?** Yes, with the Location Quantity attribute, which scores by stock at a single fulfillment location you choose. --- # Judge.me URL: https://docs.dynasort.io/attributes/judge-me/ Use Judge.me review counts and product ratings as a sorting signal in Shopify collections. ## Judge.me Review counts and product ratings from the [Judge.me](https://judge.me/) platform. ## Frequently asked questions **Q: What Judge.me data can Dynasort sort by?** The product rating and the review count that Judge.me writes to your Shopify products, both available as attributes you can weight in a recipe. **Q: Do I need to connect Judge.me to Dynasort?** No. Dynasort reads the product metafields Judge.me already writes to Shopify, so there is no API key, export or extra setup. Keep using Judge.me as normal. **Q: How should I weight review data in a recipe?** Weight both rating and review count so a product with one perfect review does not outrank a proven seller with hundreds of reviews, and blend them with sales, margin or inventory. See Integrations. --- # Junip URL: https://docs.dynasort.io/attributes/junip/ Use Junip review counts and product ratings as a sorting signal in Shopify collections. ## Junip Review counts and product ratings from the [Junip](https://junip.co/platforms/shopify) platform. ## Frequently asked questions **Q: What Junip data can Dynasort sort by?** The product rating and the review count that Junip writes to your Shopify products, both available as attributes you can weight in a recipe. **Q: Do I need to connect Junip to Dynasort?** No. Dynasort reads the product metafields Junip already writes to Shopify, so there is no API key, export or extra setup. **Q: How should I weight review data in a recipe?** Weight both rating and review count so a product with one perfect review does not outrank a proven seller with hundreds of reviews, and blend them with sales, margin or inventory. See Integrations. --- # Location Quantity URL: https://docs.dynasort.io/attributes/location-quantity/ Score products by the inventory available at one chosen fulfillment location, rather than your store-wide stock total. The Location Quantity attribute rewards products based on how much inventory they have at a single fulfillment location you choose. If you run multiple warehouses, retail stores, or 3PLs, store-wide inventory totals can hide what matters: a product might show plenty of stock overall while the location that actually serves your shoppers is nearly empty. This attribute lets your sorting reflect stock where it counts, for example the warehouse that ships fastest, the store that handles local pickup, or the region a collection is aimed at. **Available for:** Collection Sorting (Recipes). ## How it works Dynasort keeps track of your inventory levels at each of your Shopify fulfillment locations. When this attribute is in a recipe, each product is scored by its available quantity at the location you selected, summed across all of the product's variants. Points are awarded on a sliding scale between your Min and Max settings: - At or below **Min**, the product earns zero points from this attribute. - At or above **Max**, the product earns the attribute's full point weight. - In between, points scale linearly with quantity. A product with no stock at the chosen location counts as zero quantity, even if it has inventory elsewhere. ## Configuration | Setting | What it does | Default | |---|---|---| | Location | Which fulfillment location's inventory to count | none selected | | Min | Quantities at or below this earn zero points | 0 | | Max | Quantities at or above this earn full points | 100 | | Auto-update Min/Max | Keeps Min and Max tuned to your catalog automatically | off | The chart on the attribute page shows how your products are distributed by quantity at the selected location, along with recommended Min and Max values, so you can place the scale where it actually separates your catalog. ### Auto-update Min/Max Inventory shifts constantly, and a Min/Max range that fit your catalog last month can drift out of tune. With the auto-update checkbox enabled, Dynasort recalculates the recommended Min and Max for this attribute once a day and applies them for you, and also applies them immediately when you save the attribute. Leave it off if you want the range pinned to specific business thresholds, for example "anything under 5 units at the main warehouse should earn nothing." ## Methodology and notes - The quantity used is the product's total available inventory at the chosen location, added up across all of its variants. - Min and Max are cutoffs, not just labels: 0 points at or below Min, full points at or above Max, and a straight-line ramp between the two. A tight range makes the attribute behave almost like a yes/no signal; a wide range produces gentler, more gradual differences. - This attribute reads one location on its own, independent of any store-wide inventory location settings you may have configured elsewhere in Dynasort. Those settings control how overall stock totals are calculated; this attribute always uses exactly the location selected here. - Inventory levels sync from Shopify on your plan's regular processing schedule, so a stock change typically influences sorting within minutes to an hour. > **Choosing Min and Max** > > Set Min just below the quantity where you would consider the product comfortably stocked at that location, and Max around the level of your well-stocked items. If Max is set far above your typical stock levels, only a handful of overstocked products will earn meaningful points and the attribute will barely differentiate the rest. The recommendations on the attribute chart are a good starting point. ## Tips - Add one instance of this attribute per location that matters, each with its own weight. A high-weight instance for your primary fulfillment center plus a low-weight instance for a secondary warehouse prioritizes products that can ship quickly while still giving some credit to stock elsewhere. - Use it to clear overstock at a specific location: a recipe that combines Location Quantity with On Sale naturally promotes discounted products sitting in the warehouse you want to empty. - If you only care about total stock across your whole store, the regular Inventory Quantity attribute is the simpler choice. Reach for Location Quantity when the *where* matters as much as the *how much*. ## Frequently asked questions **Q: What does the Location Quantity attribute score?** A product's available inventory at one Shopify fulfillment location you choose, summed across all of its variants. Stock at other locations is ignored, so a product with no units at the chosen location counts as zero. **Q: How are points awarded?** On a linear scale between Min and Max: zero points at or below Min, the full point weight at or above Max, and a straight-line ramp in between. The defaults are Min 0 and Max 100, and the attribute chart recommends values that fit your catalog. **Q: What does Auto-update Min/Max do?** It recalculates the recommended Min and Max for this attribute once a day and applies them, and also applies them when you save. Leave it off to pin the range to a business threshold such as 'under 5 units at the main warehouse earns nothing'. **Q: Can I weight several locations differently?** Yes. Add one instance per location, each with its own weight, for example a high weight for the fulfillment centre that ships fastest and a low weight for a secondary warehouse. **Q: When should I use Inventory Quantity instead?** When only total store-wide stock matters. Inventory Quantity is the simpler choice; Location Quantity is for when where the stock sits matters as much as how much there is. --- # LOOX URL: https://docs.dynasort.io/attributes/loox/ Use Loox review counts and product ratings as a sorting signal in Shopify collections. ## LOOX Review counts and product ratings from the [LOOX](https://loox.app/) platform. ## Frequently asked questions **Q: What Loox data can Dynasort sort by?** The product rating and the review count that Loox writes to your Shopify products, both available as attributes you can weight in a recipe. **Q: Do I need to connect Loox to Dynasort?** No. Dynasort reads the product metafields Loox already writes to Shopify, so there is no API key, export or extra setup. Keep using Loox as normal. **Q: How should I weight review data in a recipe?** Weight both rating and review count so a product with one perfect review does not outrank a proven seller with hundreds of reviews, and blend them with sales, margin or inventory. See Integrations. --- # Margin URL: https://docs.dynasort.io/attributes/margin/ Rank products by profit margin, calculated from price and average cost across variants. ## Margin The profit margin on a product. **Margin = (Price – Average Cost) / Price × 100**. **Note:**Since costs and prices are variant-based, Dynasort calculates **Margin** by taking average margin across variants for a product. ## Frequently asked questions **Q: How does Dynasort calculate Margin?** Margin = (Price minus Average Cost) divided by Price, times 100, using the price and cost per item set on each variant in Shopify. Because both are variant-level, Dynasort averages the margin across a product's variants. **Q: Why is Margin empty for some products?** Margin needs a cost per item on the variant in Shopify. Products with no cost recorded cannot be calculated. Add the cost in Shopify and Dynasort picks it up on the next sync. **Q: How do I build a 'maximise profit' sort?** Weight Margin alongside a demand signal such as Sales or Conversion Rate. Margin alone promotes high-margin items nobody buys; combined with demand it surfaces products that are both profitable and wanted. --- # Metafields URL: https://docs.dynasort.io/attributes/metafields/ Sort or filter products by any Shopify metafield value using a namespace, key and condition. ## Metafields The most advanced, and one of the most powerful attributes are for [Shopify metafields](https://help.shopify.com/en/manual/custom-data/metafields). Metafield values may be evaluated by selecting a namespace, metafield key, and condition. Conditions include: - Is equal to - Is not equal to - Starts with - Ends with - Contains - Does not contain - Is not empty - Is empty - Exists - Does not exist - Is greater than - Is lesser than - Is true - Is false Additionally, collection sorting may be done with a metafield value in a numeric range. ## Frequently asked questions **Q: Which metafields can Dynasort read?** Any Shopify product metafield. You select the namespace and key, then a condition to test the value with. **Q: Which conditions are available for metafields?** Is equal to, is not equal to, starts with, ends with, contains, does not contain, is empty, is not empty, exists, does not exist, is greater than, is lesser than, is true and is false. Collection sorting can also score a numeric metafield on a range between a Min and Max. **Q: Can I rank by a numeric metafield such as a margin or popularity score from another app?** Yes. Choose the metafield and use the numeric range option so the value scales between your Min and Max, exactly like Dynasort's built-in numeric attributes. **Q: Can a metafield drive a managed collection?** Yes. Use any of the conditions above as a managed collection rule, for example 'custom.season is equal to winter' or 'custom.preorder is true'. --- # Most Clicked Products URL: https://docs.dynasort.io/attributes/most-clicked-products/ Reward the products shoppers actually click on in each collection, with points that adapt to every collection's own click leaders. The Most Clicked Products attribute rewards the products shoppers click most. Clicks are one of the most direct signals of shopper interest: they happen earlier and far more often than purchases, so they respond quickly to changing demand and work well even in collections where sales are too sparse to sort by. **Available for:** Collection Sorting (Recipes) and Managed Collections. ## How it works A click is counted when a shopper opens a product from a collection page. Dynasort already tracks these per collection, and you can see them today in the single collection view's insights. When this attribute is in a recipe, Dynasort looks at each collection's own click leaderboard for your chosen timeframe and awards points to the top N products on a sliding scale: the most clicked product gets the attribute's full point weight, and each rank below it gets proportionally less, down to the last qualifying spot. Products outside the top N earn nothing from this attribute. ### Scored per collection, not per recipe This attribute is unusual: its scores are calculated separately for every collection, even when those collections share the same recipe. > **Why this matters** > > Suppose Collection X and Collection Y both use the same recipe. Product A is the click leader in Collection X, while Product B leads in Collection Y. With Most Clicked Products in that recipe, Product A rises to the top of Collection X and Product B rises to the top of Collection Y. Every other attribute in Dynasort scores a product the same way everywhere; this one adapts to each collection's own audience. ## Configuration [Image: Most Clicked Products attribute editor showing the timeframe and top products fields] | Setting | What it does | Default | |---|---|---| | Timeframe | The click-counting window (24 hours to 90 days) | 30 days | | Top products | How many of the collection's most clicked products earn points | 10 | ## Methodology Points scale by rank position, not by raw click counts. With Top products set to N, the product ranked r earns: > (N - r + 1) / N of the attribute's point weight So with the default of 10: 1st place earns 100% of the points, 2nd place 90%, 3rd place 80%, down to 10th place at 10%. Rank-based scoring is deliberate. Raw click counts vary enormously between collections and stores: a niche collection's leader might get 40 clicks a month while a flagship collection's leader gets 4,000. Scoring by rank means the attribute behaves identically in both, with no thresholds to tune per collection. It also keeps one runaway product from flattening the differences among everything below it. You can see the result in any sorted collection's product details: the raw value is the product's clicks in this collection, and the calculated points reflect its rank. Here the collection's click leader (20 clicks) earns the attribute's full 10 points: [Image: Product details modal showing Most Clicked Products with raw value 20 and the full 10 of 10 points] Two products with equal click counts occupy adjacent ranks rather than sharing one, so each step down the leaderboard always costs the same fraction of points. ## Using it in a Managed Collection As a managed collection condition, the signal is called **Product Clicks** and reads as: > Product Clicks *[operator]* *[count]* in the last *[timeframe]* One important difference: the condition uses a product's **total clicks across your whole store**, summed over every collection it appears in. A managed collection is choosing which products to include, so there is no single collection to scope clicks to yet. Use it to build collections like "trending now": for example, "Product Clicks greater than 50 in the last 7 days." Products with no recorded clicks count as zero, so "Product Clicks less than 5" includes products that have never been clicked. ## Data freshness and notes - Click data updates periodically throughout the day, not in real time. Expect new clicks to influence sorting within a few hours. - Brand new collections, and collections with very little traffic, have no click history yet, so every product scores zero on this attribute until shoppers start clicking. Your recipe's other attributes carry the sorting in the meantime. - Clicks are counted from your storefront's collection pages. Product visits arriving from search, ads, or direct links are not collection clicks and do not count here (Product Views covers those). ## Tips - Most Clicked Products and Product Views complement each other: views measure overall product interest store-wide, clicks measure what wins attention inside this specific collection. - A shorter timeframe (7 days) makes the collection track current interest closely; 30+ days favors consistent performers over momentary spikes. - Keep Top products modest (10 to 20). The goal is to elevate proven attention-getters, not to let click counts dictate the entire collection order. - Watch for feedback loops: products at the top of a collection naturally get more clicks. Balancing this attribute with merchandising attributes (margin, inventory, newness) keeps the sort from simply reinforcing yesterday's order. ## Frequently asked questions **Q: What does the Most Clicked Products attribute reward?** The products shoppers open most from a collection page. Dynasort ranks each collection's own click leaders for your timeframe and awards points to the top N, with the leader earning the full point weight and each rank below earning proportionally less. **Q: Why is this attribute scored per collection?** Because click leaders differ by audience. Two collections sharing one recipe each promote their own most-clicked products, whereas every other Dynasort attribute scores a product identically everywhere. **Q: How are the points calculated?** By rank, not raw clicks: the product ranked r out of N earns (N minus r plus 1) divided by N of the point weight. With the default top 10, first place earns 100%, second 90%, down to tenth at 10%. Rank-based scoring behaves the same in a niche collection with 40 clicks and a flagship one with 4,000. **Q: How does it work as a managed collection condition?** There it is called Product Clicks and uses a product's total clicks across the whole store, since there is no single collection to scope to yet. 'Product Clicks greater than 50 in the last 7 days' builds a trending collection. **Q: Do clicks from search or ads count?** No. Only clicks from collection pages count here. Product visits from search, ads or direct links are covered by Product Views. Click data updates a few times a day, not in real time. --- # Okendo URL: https://docs.dynasort.io/attributes/okendo/ Use Okendo review counts and product ratings as a sorting signal in Shopify collections. ## Okendo Review counts and product ratings from the [Okendo](https://okendo.io) platform. ## Frequently asked questions **Q: What Okendo data can Dynasort sort by?** The product rating and the review count that Okendo writes to your Shopify products, both available as attributes you can weight in a recipe. **Q: Do I need to connect Okendo to Dynasort?** No. Dynasort reads the product metafields Okendo already writes to Shopify, so there is no API key, export or extra setup. Keep using Okendo as normal. **Q: How should I weight review data in a recipe?** Weight both rating and review count so a product with one perfect review does not outrank a proven seller with hundreds of reviews, and blend them with sales, margin or inventory. See Integrations. --- # On Sale URL: https://docs.dynasort.io/attributes/on-sale/ Boost or demote products where any variant's compare-at price is higher than its price. ## On Sale Whether or not any variant’s compare at price is greater than its price. Will evaluate as true if one or multiple variants are so. ## Frequently asked questions **Q: How does Dynasort decide a product is On Sale?** A product is on sale when any variant's compare-at price is greater than its price. One qualifying variant is enough for the whole product to evaluate as true. **Q: Can I demote sale items instead of boosting them?** Yes. Give the attribute a negative point value to push discounted products down, for example to lead a collection with full-price items. **Q: Can I build a Sale collection automatically?** Yes. A managed collection with the condition 'On Sale is true' adds products as soon as a compare-at price is set above the price and removes them when the markdown ends. --- # Option Names URL: https://docs.dynasort.io/attributes/option-names/ Score products by whether their variant option names match a condition. ## Option Names Evaluates whether a product’s variant option names match the conditions. ## Frequently asked questions **Q: What does the Option Names attribute check?** Whether a product's variant option names, such as Size, Color or Material, match the condition you set. It tests the option labels, not the values within them. **Q: How is Option Names different from Option Values?** Option Names tests the option itself, for example 'has an option called Size'. Option Values tests the choices inside it, for example 'has a variant whose value is XL'. **Q: What is a practical use?** Grouping or separating configurable products: a managed collection of everything with a Size option, or demoting products that carry an Engraving option in a gifting collection where lead time matters. --- # Option Values URL: https://docs.dynasort.io/attributes/option-values/ Score products by whether any variant option value matches a condition. ## Option Values Evaluates whether a product’s variant option values match the conditions. If any variant option value matches, it will evaluate as true. ## Frequently asked questions **Q: What does the Option Values attribute check?** Whether any variant option value on the product, such as Red, XL or Cotton, matches the condition you set. If any single variant value matches, the product evaluates as true. **Q: Can I boost products available in a specific colour or size?** Yes. Set the condition to the value, for example 'contains Black', and give it a point weight. To require the value to be in stock as well, pair it with Variants In Stock or Sizes In Stock. **Q: How is Option Values different from Product Tag?** Option Values reads the variant options merchants already maintain for selling, while Product Tag reads free-form tags. Option Values needs no extra tagging work. --- # Price URL: https://docs.dynasort.io/attributes/price/ Sort by the average price across all of a product's variants as set in Shopify. ## Price The average price value as set in Shopify for all of a product’s variants. ## Frequently asked questions **Q: What does the Price attribute use?** The average price across all of a product's variants, as set in Shopify. **Q: Can I boost higher-priced or lower-priced products?** Either. Set Min and Max so the price band you want earns the most points, or use two instances in a managed collection such as 'Price greater than $20' and 'Price less than $100' to select a range. **Q: Does Price reflect discounts?** Price is the current selling price. The original pre-discount price is a separate attribute, Compare At Price, and On Sale flags products where the two differ. --- # Price Varies URL: https://docs.dynasort.io/attributes/price-varies/ Score products by whether their variants have different prices or all share one price. ## Price Varies Evaluates whether or not variants vary in price, or are all prices the same. ## Frequently asked questions **Q: What does the Price Varies attribute check?** Whether a product's variants have different prices or all share one price. It is a true or false test. **Q: Why would I sort by Price Varies?** Products with varying variant prices show 'from' pricing on many themes, which can confuse shoppers in a collection sorted by price. Demoting them, or gathering them into their own managed collection, keeps price presentation consistent. **Q: Which price does Dynasort use for a product whose variants vary?** The Price attribute averages the variant prices. Price Varies simply tells you that averaging happened. --- # Product Created Age URL: https://docs.dynasort.io/attributes/product-created-age/ Rank products by the number of days since they were created in Shopify. ## Product Created Age The number of days since the product was created in Shopify. ## Frequently asked questions **Q: What does Product Created Age measure?** The number of days since the product was created in Shopify, counted back from today. **Q: How do I build a New Arrivals sort with it?** Add Product Created Age to a recipe with a point weight and set Min and Max, for example Min 0 and Max 30. Newer is better: products at or below Min days old earn full points, those at or above Max earn none, and ages in between taper. Weight it against sales so new products lead without burying best sellers. **Q: How is it different from Product Published Age and Age Of Newest Variant?** Created Age never changes once a product exists. Product Published Age resets whenever a product is unpublished and republished, and Age Of Newest Variant resets when a new variant is added. --- # Product Published Age URL: https://docs.dynasort.io/attributes/product-published-age/ Rank products by the number of days since they were last published in Shopify. ## Product Published Age The number of days since a product was last published in Shopify. **Note:** A product may be published, unpublished, and then published again. The latest date published will be evaluated. ## Frequently asked questions **Q: What does Product Published Age measure?** The number of days since the product was last published in Shopify. If a product was published, unpublished and published again, the latest publish date is used. **Q: When is Product Published Age better than Product Created Age?** When you relaunch products. A product created two years ago but republished last week counts as one week old here, so it can join a New Arrivals sort, while Product Created Age would still treat it as two years old. **Q: Does republishing a product boost it?** Only if a recipe weights this attribute. Newer is better: products at or below Min days since publish earn full points and those at or above Max earn none, so a republished product re-enters the boost window. Dynasort picks up the new publish date on the next sync. --- # Product Tag URL: https://docs.dynasort.io/attributes/product-tag/ Boost or demote products by whether a tag is present, absent, or contains a value. ## Product Tag Evaluates whether a product tag is present, not present, contains, or all tags do not contain a particular value. ## Frequently asked questions **Q: What does the Product Tag attribute check?** Whether a product's tags match a condition: a tag is present, a tag is not present, a tag contains a value, or no tag contains a value. **Q: Can I boost or demote products by tag?** Yes. Add the attribute with a positive weight to promote products carrying a tag such as 'featured', or a negative weight to demote a tag such as 'clearance'. **Q: Can a tag drive a managed collection?** Yes. 'Product Tag contains promo' as a managed collection condition keeps the collection in sync with your tagging, optionally ranked by a recipe and capped at the top N products. --- # Product Type URL: https://docs.dynasort.io/attributes/product-type/ Boost or demote products by whether their product type equals or contains a value. ## Product Type Evaluates whether the product type is equals, does not equals, contains, or does not contain a particular value. ## Frequently asked questions **Q: What does the Product Type attribute check?** Whether the product's type in Shopify equals, does not equal, contains or does not contain a value you specify. **Q: How would I use Product Type in a recipe?** To bias a mixed collection toward a category, for example adding points to type 'Jacket' in an outerwear collection, or demoting accessories so they sit below apparel. **Q: What is the difference between Product Type and Product Tag?** Each product has exactly one type but any number of tags. Use Product Tag for merchandising flags and Product Type for the catalog category. --- # Product Views URL: https://docs.dynasort.io/attributes/product-views/ Rank products by the total number of product page views in a chosen timeframe. ## Product Views Total number of product views during a set timeframe. ## Frequently asked questions **Q: What does the Product Views attribute measure?** The total number of product page views within the timeframe you choose, counted from every source: collections, search, ads and direct links. **Q: How is Product Views different from Most Clicked Products?** Product Views is store-wide interest from any source. Most Clicked Products counts only clicks from a collection page and is scored per collection. **Q: Should I rank by views alone?** Rarely. Views reward exposure, and products already at the top of a collection get the most of it. Combine views with Conversion Rate or Add To Cart Rate so popular products that also convert rise. --- # Requires Shipping URL: https://docs.dynasort.io/attributes/requires-shipping/ Score products by whether any variant requires shipping. ## Requires Shipping Evaluates whether or not any variant in the product requires shipping. ## Frequently asked questions **Q: What does the Requires Shipping attribute check?** Whether any variant of the product is marked in Shopify as a physical product that requires shipping. It is a true or false test. **Q: When is Requires Shipping useful?** For separating digital goods, gift cards or services from physical products, for example demoting non-shipping items in a collection built around a free-shipping promotion, or building a managed collection of digital products only. **Q: Does one variant decide the result?** Yes. If any variant requires shipping the product evaluates as true. --- # Revenue URL: https://docs.dynasort.io/attributes/revenue/ Rank products by total revenue generated in a chosen timeframe, from line item quantity times price. ## Revenue Total revenue generated from sales of a product over a given timeframe. This value is the total number of line item quantities multiplied by their respective line item price. **Note:**This calculation is in presentment currency rendered, not set price or compare at prices for a given product. It also disregards cart level discounts. ## Frequently asked questions **Q: What does the Revenue attribute measure?** Total revenue from a product over the timeframe you choose, calculated as each line item's quantity multiplied by its line item price, summed across orders. **Q: Which currency and discounts does Revenue use?** The presentment currency the order was rendered in, not the product's set price or compare-at price. Cart-level discounts are disregarded. **Q: How is Revenue different from Sales?** Sales counts units sold. Revenue counts money. A $10 product selling 50 units has more sales but less revenue than a $200 product selling 5 units. --- # Sales URL: https://docs.dynasort.io/attributes/sales/ Rank products by total units sold in a chosen timeframe. ## Sales The total number of units sold in a given timeframe. **Note:** This may sometimes be confused with both revenue, which is a total dollar amount rendered. **Note**: The Conversions attribute measures how many checkout sessions a product is within, and total sales measures the total number of units sold (e.g. a checkout with 100 units in a line item will have Sales of 100, but only one conversion). ## Frequently asked questions **Q: What does the Sales attribute measure?** The total number of units of a product sold within the timeframe you choose, from your Shopify orders. **Q: How is Sales different from Conversions and Revenue?** Sales is units. Conversions is buying sessions, so a checkout with 100 units in one line item is 100 sales but 1 conversion. Revenue is the money those units brought in. **Q: Is Sales the same as Shopify's Best selling sort?** It is the underlying signal, but in Dynasort you control the timeframe and weight it against other attributes such as inventory, margin or newness, instead of sorting by sales alone. --- # Sizes In Stock URL: https://docs.dynasort.io/attributes/sizes-in-stock/ Boost products by the percentage of their sizes, or any other option set, currently in stock. ## Sizes In Stock The percentage of sizes, or other option sets, that are in stock. For example, a product with three sizes and five colors may have at least two any color in stock, and will be evaluated as 67% sizes in stock. **Note:**Although commonly used for size, this attribute will work for any product variant option set such as color, width, style, etc. ## Frequently asked questions **Q: What does the Sizes In Stock attribute measure?** The percentage of a product's sizes, or any other option set you choose, that are in stock. A product with three sizes where two have any variant in stock is 67% in stock. **Q: Does it only work for sizes?** No. Although commonly used for size, it works for any variant option set such as colour, width or style. Add one instance per option set if you want both size and colour to matter. **Q: How is Sizes In Stock different from Full Size Run and Variants In Stock?** Full Size Run is all or nothing for every size. Variants In Stock is the percentage of individual variants in stock. Sizes In Stock is in between: the share of sizes with at least one variant available. --- # SKU URL: https://docs.dynasort.io/attributes/sku/ Boost or demote products by whether any variant SKU matches a condition. ## SKU Evaluates whether or not any variant stock keeping unit (SKU) matches the selected conditions. ## Frequently asked questions **Q: What does the SKU attribute check?** Whether any variant's stock keeping unit matches the condition you set, such as equals, contains or starts with a value. **Q: How would I use SKU in sorting?** SKU prefixes often encode brand, season or category. 'SKU starts with FW26' can boost this season's products, and the same condition builds a managed collection with no tagging work. **Q: Does one matching variant qualify the product?** Yes. If any variant SKU matches, the product evaluates as true. --- # Sold Out URL: https://docs.dynasort.io/attributes/sold-out/ Demote products where every variant has an inventory quantity of zero or less. ## Sold Out Evaluates whether all variants of a product have an inventory quantity of 0 or less. ## Frequently asked questions **Q: How does Dynasort decide a product is Sold Out?** A product is sold out when every variant has an inventory quantity of zero or less. If any variant has stock, the product is not sold out. **Q: How do I push sold-out products to the bottom?** Recipes have a built-in sold-out handling setting that moves them to the bottom. Use the Sold Out attribute with a negative weight when you want a softer demotion that still lets a strong seller compete. **Q: What about products that continue selling at zero stock?** Negative inventory still counts as sold out here. Use the Continue Selling When Out of Stock attribute in the same recipe to keep made-to-order and pre-order products visible. --- # Stamped.io URL: https://docs.dynasort.io/attributes/stamped-io/ Use Stamped.io review counts and product ratings as a sorting signal in Shopify collections. ## Stamped.io Review counts and product ratings from the [Stamped.io](https://stamped.io) platform. ## Frequently asked questions **Q: What Stamped.io data can Dynasort sort by?** The product rating and the review count that Stamped.io writes to your Shopify products, both available as attributes you can weight in a recipe. **Q: Do I need to connect Stamped.io to Dynasort?** No. Dynasort reads the product metafields Stamped.io already writes to Shopify, so there is no API key, export or extra setup. Keep using Stamped as normal. **Q: How should I weight review data in a recipe?** Weight both rating and review count so a product with one perfect review does not outrank a proven seller with hundreds of reviews, and blend them with sales, margin or inventory. See Integrations. --- # Title URL: https://docs.dynasort.io/attributes/title/ Boost or demote products by whether their title equals or contains a value. ## Title Evaluates whether the product title is equals, does not equals, contains, or does not contain a particular value. ## Frequently asked questions **Q: What does the Title attribute check?** Whether the product title equals, does not equal, contains or does not contain a value you specify. **Q: How would I use Title in a recipe or managed collection?** To promote or gather products by a naming convention, for example boosting titles that contain 'Limited Edition' or building a managed collection of everything whose title contains 'Bundle'. **Q: Can I exclude products by title?** Yes. Use the 'does not contain' or 'does not equal' condition, for example as a managed collection rule that leaves out any title containing 'Sample', or as a recipe attribute with a negative weight. --- # Trust Reviews URL: https://docs.dynasort.io/attributes/trust-reviews/ Use Trust Reviews review counts and product ratings as a sorting signal in Shopify collections. ## Trust Reviews Review counts and product ratings from the [Trust Reviews](https://apps.shopify.com/trustreviews) platform. ## Frequently asked questions **Q: What Trust Reviews data can Dynasort sort by?** The product rating and the review count that Trust Reviews writes to your Shopify products, both available as attributes you can weight in a recipe. **Q: Do I need to connect Trust Reviews to Dynasort?** No. Dynasort reads the product metafields Trust Reviews already writes to Shopify, so there is no API key, export or extra setup. **Q: How should I weight review data in a recipe?** Weight both rating and review count so a product with one perfect review does not outrank a proven seller with hundreds of reviews, and blend them with sales, margin or inventory. See Integrations. --- # Variants In Stock URL: https://docs.dynasort.io/attributes/variants-in-stock/ Boost products by the percentage of their variants with stock on hand. ## Variants In Stock Evaluates the percentage of a products variants that have a stock level of one or more. ## Frequently asked questions **Q: What does the Variants In Stock attribute measure?** The percentage of a product's variants with a stock level of one or more. A product with 10 variants and 7 in stock scores 70%. **Q: How is Variants In Stock different from Sizes In Stock?** Variants In Stock counts every individual variant. Sizes In Stock counts a size as available if any variant of that size is in stock, so a size with one colour left still counts fully. **Q: Why rank by variant availability?** Products with most variants available give shoppers the choice they clicked for, while a product with one straggler variant left disappoints. Scoring by percentage promotes well-stocked products without hiding the others. --- # Vendor URL: https://docs.dynasort.io/attributes/vendor/ Boost or demote products by whether their vendor equals or contains a value. ## Vendor Evaluates whether the product vendor is equals, does not equals, contains, or does not contain a particular value. ## Frequently asked questions **Q: What does the Vendor attribute check?** Whether the product's vendor equals, does not equal, contains or does not contain a value you specify. **Q: How would I use Vendor in sorting?** To feature a brand across a collection with a positive weight, demote a brand with a negative weight, or build a managed collection of one vendor's products ranked by a recipe. **Q: Can I stop one brand from dominating a collection?** Use Vendor with a small negative weight for the dominant brand in the collection's recipe. On recommendation rows, the per-brand cap in the placement's display settings does the same job. --- # Yotpo URL: https://docs.dynasort.io/attributes/yotpo/ Use Yotpo review counts and product ratings as a sorting signal in Shopify collections. ## Yotpo Review counts and product ratings from the [Yotpo](https://www.yotpo.com/) platform. ## Frequently asked questions **Q: What Yotpo data can Dynasort sort by?** The product rating and the review count that Yotpo writes to your Shopify products, both available as attributes you can weight in a recipe. **Q: Do I need to connect Yotpo to Dynasort?** No. Dynasort reads the product metafields Yotpo already writes to Shopify, so there is no API key, export or extra setup. Keep using Yotpo as normal. **Q: How should I weight review data in a recipe?** Weight both rating and review count so a product with one perfect review does not outrank a proven seller with hundreds of reviews, and blend them with sales, margin or inventory. See Integrations. --- # Bot and Agent Traffic URL: https://docs.dynasort.io/bot-traffic/ How Dynasort tells shoppers, shopping agents and bots apart, and keeps bots out of your Insights and your sort order. Bots browse your collections, never buy, and quietly drag your numbers down. Dynasort now recognizes them and leaves them out of your Insights by default, and it never lets them influence your sort order. ## Overview A growing share of storefront traffic is automated: crawlers, scrapers, price monitors and page-rendering services that load your pages in a real browser. They add sessions and product views but never add to cart, so in any analytics tool they make conversion and add-to-cart rates look worse than your shoppers really are. One collection can look like it suddenly stopped converting when the only thing that changed was a bot discovering it. This is not a single-store problem. The same bots visit every store Dynasort runs on, and they are hitting Shopify stores and the web as a whole. In October 2026 one rendering farm alone produced more than 180,000 sessions across 85 of the stores we serve in a single week, and not one of them added a product to cart. ## Three kinds of traffic Dynasort sorts every storefront session into one of three groups. | Traffic | What it is | Counted in Insights (default) | Used for sorting | |---|---|---|---| | **People** | A shopper in a browser. Visitors who arrive from ChatGPT, Perplexity or other assistants by clicking a link are people. | Yes | Yes | | **Shopping agents** | Assistants that browse and buy on behalf of a real person, such as ChatGPT's agent. | Yes, as part of Shoppers | Yes | | **Bots** | Crawlers, scrapers, monitors and page-rendering services. | No | Never | ## How Dynasort tells them apart The short version: **agents shop, bots don't.** An agent exists to find or buy something for a person, so over time its traffic produces carts and checkouts. A bot never does. Because Dynasort sees every store it runs on, it can judge a device by how it behaves across the whole network, not just on your store. Each session is checked against these signals, strongest first: 1. **Declared identity.** Visitors that name themselves in their user agent are classified directly. Crawlers such as Googlebot, Bingbot and Sogou, headless browsers and monitoring tools are bots. Assistants that fetch pages for a person (ChatGPT-User, Claude-User, Perplexity-User and similar) are shopping agents. 2. **Signed agents.** Some agents sign their requests with Web Bot Auth. Signatures from known shopping-agent operators, such as ChatGPT, count as agents. A signature alone does not, because rentable headless-browser services sign their requests too. 3. **Meta's own network.** Traffic from Meta's servers is ad review and link checking, including automated add-to-carts, so it is always a bot. 4. **Shopping.** A session that adds to cart or reaches checkout is never a bot. It is a person, or a shopping agent when it comes from a hosting network. 5. **Impossible browsers.** A real browser window can't be bigger than its screen. Dynasort allows for rotated tablets and for the 8 pixels a maximized Windows window overhangs, and on phones only checks width, because Android reports window height in device pixels. Square desktop screens of 800 pixels or more, such as 1280x1280 or 1600x1600, are headless-browser defaults that no real monitor uses. 6. **Fleet fingerprints.** Twice a day Dynasort groups the last 7 days of sessions by device fingerprint (browser, screen size, window size and language) across every store. A fingerprint with at least 200 sessions and zero carts, where the stores it visited would normally have produced 10 or more carts from that many shoppers, is marked as a bot. Its earlier sessions are reclassified automatically. 7. **Busy addresses.** One IP address with 100 or more sessions in a day and no cart or checkout is a bot when it sits on a hosting network or its sessions average under 3 seconds. Mobile carriers that share one address across many phones are left alone because their sessions look like real browsing. 8. **Hosting networks.** A session from a cloud or hosting provider that views no products and leaves within a couple of pages or a few seconds is a bot. Home and mobile internet providers never trigger this rule. Everything else counts as a person. > **The known limit** > > A shopping agent that browses without buying, and doesn't identify itself, looks exactly like a scraper, so Dynasort counts it as a bot. We think that is the right call: it produced no shopper outcome. As more agents sign their requests, more of them will be recognized directly. ## Your setting: Traffic in Insights Go to **Settings > Traffic in Insights** to choose which sessions your Insights count. [Image: The Traffic in Insights section in Settings] - **Shoppers (recommended).** People plus shopping agents. Bots are left out. This is the default. - **People only.** Leaves out bots and shopping agents. - **All traffic.** Counts every visit, bots included, like raw pageview tools. The section also shows how many bot and shopping-agent sessions Dynasort found on your store in the last 7 days. When you change the setting, Dynasort rebuilds your Insights with the new choice. This usually takes a few minutes; until it finishes you'll see the default numbers. > **Sorting is not affected** > > This setting only changes what Insights shows. Sorting never uses bot visits, so your sort order is the same whichever you pick. ## What you'll see in Insights At the top of [Insights](https://docs.dynasort.io/insights/), the **Traffic quality** card tells you which sessions the numbers count and how many bot sessions were left out for the selected timeframe, with a link to change the setting. [Image: The Traffic quality card on the Insights page] When a collection's traffic jumps without carts following, the card also shows a warning. Dynasort flags a collection when its sessions at least tripled week over week, with 300 or more sessions this week, its add-to-cart rate fell by two thirds or more, and at least 60% of its visitors arrived with no referrer and no campaign (UTM) tag. Campaigns don't trigger it: an email blast or a paid social push brings a wave of browsers too, but they arrive tagged. Untagged surges are how bot traffic Dynasort hasn't identified yet usually looks. If you see the warning, let us know and we'll check. The [performance timeline](https://docs.dynasort.io/insights/#performance-timeline) shows a **Bot filtering on** marker on the day filtering started, and a marker whenever you change the Traffic in Insights setting. [Image: The Bot filtering on marker on the Insights timeline] ## History Days from **October 6, 2026** onward are filtered. Earlier days stay exactly as they were recorded. Expect a step up in conversion and add-to-cart rates on that date in your timeline: that is the bots leaving, not a change in your shoppers. ## Privacy To recognize hosting networks and busy addresses, Dynasort looks at the network a visit comes from. We never store a shopper's IP address. For each session we keep only: - the country - the network owner, such as a mobile carrier or a cloud provider - the IP address with its last part removed (for example 203.0.113.x) - a scrambled version of the full address that is created with a new random key every day and cannot be traced back The daily keys are deleted after two days, so the scrambled values can't be linked across days. Country and network data come from [DB-IP](https://db-ip.com) (IP Geolocation by DB-IP, licensed under [CC BY 4.0](https://creativecommons.org/licenses/by/4.0/)). ## Tips - Compare Insights with GA4 on the same collection: a large gap in sessions with a similar number of carts is usually bot traffic Dynasort removed. - If a collection is flagged for a spike and you didn't run a campaign, it's worth a look. Tell us and we'll check whether it's a new bot. - Use [A/B Testing](https://docs.dynasort.io/ab-testing/) results with confidence: they're measured on shoppers, so bots can't tip a test. ## Frequently asked questions **Q: Why does Dynasort leave bots out of Insights?** Bots browse collections and never buy. Counting them pads your session numbers and pulls conversion and add-to-cart rates down, so a collection can look like it is failing when your shoppers are buying normally. Leaving them out shows what real shoppers did. **Q: Is bot traffic a problem for my store only?** No. The same bots visit every store Dynasort runs on, and they are hitting Shopify stores and the web as a whole. In October 2026 bots were roughly 15% of all sessions across our network, and above 30% on some stores. **Q: Do bots affect my sort order?** No. Sorting never uses bot visits, whatever you choose for Traffic in Insights. Product views, add-to-carts and conversion rates in your recipes come from shoppers only. **Q: Does ChatGPT's shopping agent count as a shopper?** Yes. A shopping agent browses and buys on behalf of a real person, so Dynasort counts it with your shoppers by default. Choose People only in Settings if you want to see human visitors alone. **Q: Why does Google Analytics still show more sessions than Dynasort?** GA4 filters only bots that declare themselves. Most of the traffic Dynasort removes uses an ordinary browser user agent, so GA4 counts it as a person. GA4 also counts landing-page sessions while Dynasort counts sessions that viewed each collection, so totals always differ. **Q: What if a real shopper is counted as a bot?** Any session that adds to cart or checks out is never counted as a bot, so buyers are always counted. The remaining risk is a person on a hosting network or VPN who looks at very little; tell us if something looks off and we review the rule. **Q: Can I see the numbers with bots included?** Yes. In Settings, set Traffic in Insights to All traffic. Your Insights rebuild within a few minutes. Switch back any time. **Q: Does Dynasort store shopper IP addresses?** No. We keep the country, the network owner, the IP address with its last part removed and a scrambled version of the address that changes every day. The full IP address is never stored. **Q: Which days are filtered?** Every day from October 6, 2026 onward. Earlier days stay as they were recorded, and your Insights timeline shows a Bot filtering on marker on that date. --- # Tapcart URL: https://docs.dynasort.io/tapcart/ How Dynasort works with a Tapcart mobile app. Collection sorting carries over on its own, and the Tapcart clickstream webhook brings in-app browsing, carts and orders into Dynasort Insights. [Tapcart](https://www.tapcart.com/) turns a Shopify store into a native iOS and Android app. Dynasort works with it on two levels. The sorting you already run reaches the app on its own, because Tapcart reads collections straight from Shopify. On top of that you can connect Tapcart's clickstream webhook so the browsing, carts and orders that happen inside the app show up in Dynasort [Insights](https://docs.dynasort.io/insights/). ## What carries over on its own Dynasort writes every ranking into the collection's order in Shopify. Tapcart reads collections from Shopify and shows the products in that order, so the following work in the app with nothing to connect: - **Collection sorting.** Every collection Dynasort sorts is sorted the same way in the app, on the same schedule. - **Pins and boosts.** A product you pin to a position, or boost inside a recipe, lands in that spot in the app too. - **Sort Rotation.** A [rotation](https://docs.dynasort.io/sort-rotation/) changes the Shopify order, so the app follows each step. - **Managed collections.** A Dynasort [managed collection](https://docs.dynasort.io/managed-collections/) is a normal Shopify collection. Publish it to the Tapcart sales channel and you can point any Tapcart home-screen block at it. A "Trending" or "Selling fast" managed collection makes a good app landing block. - **Order-based attributes.** Orders placed in the app are ordinary Shopify orders, so sales velocity, revenue and margin attributes already include them. > **Publish to the Tapcart sales channel** > > Tapcart shows only products and collections that are published to the **Tapcart - Mobile App** sales channel in Shopify, and only active products. If a Dynasort managed collection does not appear in the app, check its sales channel availability in the Shopify admin. ### Timing Dynasort re-sorts on your plan's schedule. Tapcart picks up Shopify changes within a few minutes of a sort. If a collection looks stale in the app, force-close and reopen it. ## Bringing app traffic into Insights Shopify web pixels only run in a browser. Inside a native app there is no pixel, so on its own Dynasort sees the orders your app produces but none of the browsing that led to them. Tapcart's **clickstream webhook** fixes that: Tapcart sends each in-app action to a URL you choose, and Dynasort gives every store its own URL. ### Connect it 1. In Dynasort, open **Settings** and scroll to **Tapcart mobile app**. Copy the **Clickstream webhook URL**. 2. In the Tapcart dashboard, open **Settings**, then **Webhooks**. Turn the feature on, paste the URL and choose which events to send. Select all events, or at least `collectionViewed`, `productViewed`, `cartAdd` and `purchaseCompleted`. Save. 3. Open your app and browse a collection. Back in Dynasort Settings, the Tapcart card shows how many events have arrived and when the last one landed. Opening the URL in a browser shows a short confirmation naming your store, which is a quick way to check it was pasted correctly. > Webhooks only send events from the moment you connect them. Tapcart does not backfill history, so connect it as soon as your app is live. ### What Dynasort records | Tapcart event | What Dynasort records | | --- | --- | | `applicationOpened`, `pageView` | Starts or continues an app session | | `collectionViewed` | A collection view | | `productViewed` | A product view | | `cartAdd` | An add to cart for each product that was added | | `purchaseCompleted` | An order, linked to the session that produced it | Every other event is accepted and ignored. Sessions are cut the same way as web sessions, after an hour of inactivity, and appear in Insights once the normal processing runs, usually within a few hours. Dynasort keeps the anonymous device identifier Tapcart assigns, the event time and the product, collection or order id. It does not store names, emails, customer ids or push tokens. Shoppers who have opted out of tracking in the app are never recorded. ### Where app sessions show up - **Insights** session counts, collection conversion and the timeline include app sessions alongside web sessions. - **Co-occurrence attributes** (viewed together, carted together, bought together) learn from app behaviour too, which sharpens recommendations for both channels. ### A new URL **Generate a new URL** on the Tapcart card retires the current one immediately. Use it if the URL was shared somewhere it should not have been. Paste the new URL into Tapcart afterwards. ## Search and merchandising apps inside Tapcart Tapcart lets you connect a search or merchandising provider (Algolia, Searchspring, Nosto, Fast Simon, Constructor, Boost, Searchanise and others). When one is connected, that provider decides the order of products in the app's collection grids, so Dynasort's order can be overridden in the app while the web store still shows it. If you rely on Dynasort for collection order, either leave the provider's collection merchandising off or use it for search only. Shopify Search and Discovery is different. In Tapcart it adds sort and filter controls to collection pages; the collection's default order stays the one Shopify holds, which is Dynasort's. Dynasort's own [search re-ranking](https://docs.dynasort.io/search-re-ranking/) and [product recommendation](https://docs.dynasort.io/product-recommendations/) widgets run on your web storefront and do not render inside a Tapcart app. ## Rank metafields in the app If you enable [Push Rank to Metafields](https://docs.dynasort.io/collection-sorting/push-rank-meta/), each product carries its rank position, score and percentile as metafields. Tapcart can read product metafields once **Storefront API access** is enabled on the metafield definition in Shopify (Settings, then Metafields and metaobjects), and can show them in product page blocks or use them in conditional visibility rules. Tapcart badges are driven by product tags, so a "Top 10" badge needs a tag as well, which a tagging app or Shopify Flow can add. ## Troubleshooting **The app shows a different order than the web store.** Give Tapcart a few minutes after a sort, then force-close and reopen the app. If the difference persists, check whether a search or merchandising provider is connected in Tapcart, and confirm the collection is enabled in Dynasort. **No events are arriving.** Open the webhook URL in a browser. If it returns a message naming your store, the URL is right and the webhook toggle or event selection in Tapcart is the place to look. If it returns an error, copy the URL again from Dynasort Settings. **Orders show but no browsing.** The webhook is not connected, or only `purchaseCompleted` is selected. Add the browsing events. ## Setting up Tapcart itself Tapcart is a separate subscription. In short: install it from the Shopify App Store, design the app in Tapcart's App Studio, and publish through your own Apple Developer and Google Play accounts. Tapcart's own guides cover the details: [Adding products and collections](https://help.tapcart.com/en/articles/13800694-adding-products-collections-to-tapcart), [Connecting clickstream webhooks](https://help.tapcart.com/en/articles/16402237-connecting-clickstream-webhooks) and their [FAQ](https://help.tapcart.com/en/articles/13800699-frequently-asked-questions). ## Frequently asked questions **Q: Does Dynasort work with Tapcart?** Yes. Tapcart shows each collection in the order Shopify holds, and Dynasort writes its ranking into that order. Every collection Dynasort sorts is sorted the same way in your Tapcart app with nothing to connect. Optionally, connect Tapcart's clickstream webhook so in-app shopper behaviour reaches Dynasort Insights. **Q: Do I need to connect anything for the app to show Dynasort's order?** No. Dynasort applies its sort through Shopify's collection order, and Tapcart reads that order. The only requirement is that the products and the collection are published to the Tapcart sales channel in Shopify, which is how Tapcart decides what appears in the app. **Q: How long after a re-sort does the app update?** Dynasort re-sorts on your plan's schedule and Tapcart picks up Shopify changes within a few minutes. If a collection looks stale in the app, force-close and reopen it. **Q: Why does Insights need a webhook for app traffic?** Shopify web pixels only run in a browser. Inside a native app there is no pixel, so without the webhook Dynasort sees the orders your app produces but none of the browsing that led to them. Tapcart's clickstream webhook sends each in-app action to Dynasort so app sessions show up alongside web sessions. **Q: Which Tapcart events does Dynasort use?** applicationOpened and pageView start a session, collectionViewed, productViewed and cartAdd record browsing and carts, and purchaseCompleted records the order. Other events are accepted and ignored. Shoppers who have opted out of tracking in the app are never recorded. **Q: Does Dynasort store personal data from the app?** No. Dynasort keeps the anonymous device identifier Tapcart assigns, the event time, and the product, collection or order id. It does not store names, emails, customer ids or push tokens. **Q: I connected a search app to Tapcart. Will Dynasort's order still show?** Maybe not. When a search or merchandising provider is connected in Tapcart, that provider decides the order of products in collection grids, so Dynasort's order can be overridden in the app while the web store still shows it. Shopify Search and Discovery adds sort and filter controls without replacing the collection's default order. **Q: Do app orders count in Dynasort's sales attributes?** Yes. Orders placed in a Tapcart app are ordinary Shopify orders, so sales velocity, revenue and every other order-based attribute already include them. Nothing to set up.