Guides
Recommendations
Two lists for every product page: products that go with it, and similar products to choose instead. Built from your catalog alone, as a paid add-on.
Recommendations give each product two lists for its page:
- Goes with: products to use with it or for the same occasion. Strings and a strap for a guitar; a sleeping pad and a stove for a tent; plates and balloons for a party theme.
- Similar: products a shopper could choose instead. Other sizes or colours of the same product come after the alternatives, or not at all if you prefer.
They're built ahead of time from your catalog alone (titles, categories, descriptions, and prices), so they work from the first day, without orders, clicks, or tracking. A product page reads both lists in one request, which the edge caches like a search.
Recommendations are an add-on to a paid plan, priced by the products they cover. See pricing.
Turn them on
- In the dashboard, open an index and choose Recommendations. On Shopify, use the Findlane app instead: see Shopify.
- Preview, if you like. Each workspace can build lists for its 20 most popular products for free. They show in the dashboard only.
- Choose Turn on recommendations, pick how many products to cover, and choose monthly or yearly billing. Checkout is through Polar, our reseller.
- Lists are built in the background, the most popular products first. The page shows how many are ready, and a preview of each product's lists with the picks that were left out, and why.
What helps:
- A title and a category field. Findlane finds them in most catalogs, and you can choose the category field yourself.
- A price, for the price limit below.
- A description, especially when titles are short.
- A
popularitynumber, such as units sold in the last 30 days, so the best sellers get their lists first. Without one, products are built in record order.
On your pages
With the React SDK, place a list on the product page. Both lists for the same product share one request, and a list renders nothing while the product has none, so it's safe on every page:
import { Recommendations } from "@findlane/browser/react"
<Recommendations objectID={product.id} list="goesWith" />
<Recommendations objectID={product.id} list="similar" />title changes the heading ("Goes well with" and "Similar products" by default, or null for none), render draws each product, and loading shows while the lists load. useRecommendations(objectID, options) returns { data, error, isPending } for your own markup.
With the browser SDK or the server SDK:
// In the browser, with the index's public ID
const { ready, goesWith, similar } = await client.recommendations("sku-123")
// On your server, with a key that has the search scope
const lists = await index.recommendations("sku-123", { limit: 6, filters: { inStock: true } })Request
| Field | |
|---|---|
objectID | The product. |
limit | Products in each list: up to 20, and 8 by default. |
filters | Filters, as in a search, applied to the picks: { "inStock": true }, { "price": { "lte": 50 } }. |
attributesToRetrieve | The fields each pick returns. From browsers, the index's public search policy applies. |
maxPriceRatio | Overrides the price limit for one placement: on a cart page, 1 shows only picks that cost no more than the product. |
Response
{
"objectID": "sku-123",
"ready": true,
"goesWith": [{ "id": "sku-456", "score": 0.91, "record": { "title": "Guitar strap" } }],
"similar": [{ "id": "sku-124", "score": null, "record": { "title": "Classical guitar" } }]
}Picks are shaped like search hits. A Goes with pick's score is how sure the model is that it fits. ready is false, with both lists empty, until the product's lists are built. Either list may be empty: hide the block when it is.
Settings
On the index's Recommendations page:
- Price limit: Goes with picks may cost at most 2×, 3× (the default), or 5× the product, or there's no limit. It keeps a snare drum off a pair of drumsticks; turn it off when pricier picks make sense, as in a party store.
- Variants in Similar: other sizes and colours of the product, after the alternatives.
- Category field: the field that groups products. Changing it rebuilds every list.
- Category map: for each category, the categories whose products go with it, as the model answered. Switch a pair on or off and that category's lists are rebuilt.
The price limit and variants apply at once. While lists are rebuilt, pages keep the current ones.
Keeping lists current
- New and changed products get lists in the next build, which runs every few minutes after writes.
- A change of price or stock rebuilds nothing: the price limit and filters use each product's current record when a page asks.
- Deleted products leave every list.
- Builds run apart from search, so searches and record writes never wait for them.
Pricing
The add-on is sold in units of 1,000 products and billed separately from your plan, monthly or yearly (ten months' price):
| Products | A month, per 1,000 |
|---|---|
| Up to 10,000 | $1.50 |
| 10,001 to 50,000 | $1.20 |
| 50,001 to 200,000 | $0.90 |
At least 4,000 products ($6 a month). 9,000 products cost $13.50 a month, 50,000 cost $63, and 200,000 cost $198. For more, write to hello@findlane.dev.
- It covers your most popular products, up to the number you choose, across the workspace's indexes with recommendations on. A growing catalog never costs more by itself: the dashboard offers to cover the rest.
- More products, or yearly billing, start at once, and are charged for the rest of the period. Fewer products, or monthly billing, start at renewal.
- It needs a paid plan. If the plan ends, the add-on ends at the end of its own period.
- Requests aren't counted as searches. Browser requests are rate-limited like browser searches.
- Shopify stores add it to their plan's Shopify charge in the Findlane app, and show it with a block on product pages. See Shopify.
Privacy
Only product data is used: no shoppers, orders, or clicks. Product text is processed by models on Cloudflare, where Findlane already runs.