Cold start

What it is

Cold start is the engine's strategy for customers it knows little about. Instead of leaving a new customer without recommendations (or serving them something random), personalisation grows in stages: the more purchases, the more personal the picks become.

How it is computed

Every customer is in one of four tiers based on purchase count (updated nightly):

TierCustomer historyWhat they get
0no purchasesthe store's most popular products; species-specific items (cat/dog) are excluded until the pet's species is known
11 purchaseproducts that complement the first purchase's category + top items from the same and adjacent categories
22-3 purchaseshybrid: half segment knowledge, half rules; no experimental picks yet
34+ purchasesfull personalisation: buying cadence, segment, all calibrations

If the customer has an active trigger (e.g. a replenishment window, a winback signal, a seasonal window), trigger-driven picks take the first slots in every tier — the tier only decides how the remaining slots are filled.

How to interpret it

  • If a large share of customers have "bestseller-based" picks, that is not a bug — it reflects the depth of purchase history in your customer base. Many stores have most contacts with no purchase or one old purchase.
  • The tier looks at purchase count; engagement state looks at recency of the last purchase — two different axes. A customer can be tier 3 (many purchases) and dormant (purchases long ago) at the same time.
  • Any species signal moves a customer out of tier 0 faster: store-plugin browse data or the first purchase.

Common misreadings

  • "Why do two different customers get the same products?" — if both are in tier 0, they get a similar popularity-based selection (with light rotation). This changes with the first purchase/browse signal.
  • "A cat owner got a dog product" — while the species is unknown, tier 0 offers the store's best-sellers balanced across species (cat and dog). It deliberately does not narrow the selection down to a "neutral" shelf (transport, grooming etc.): a customer we know nothing about is better served by the products that actually sell. If the species IS known and it still happens, tell the operator — that is a hard rule and it should never happen.

Technical background

Tier: customers.cold_start_tier (0-3), spec §6.11. While inferred_species is unknown, tier 0 ranks the whole offerable catalog by popularity and balances the slate across species (§6.11, "performance first" — a soft taxonomy preference never displaces better-performing products); once the species IS known, the other species' products are excluded on every path (§6.12). Non-recommendable products (gift cards, test articles) are filtered by catalog.recommendable on all paths. A product the customer returned in the last 180 days is likewise excluded on all paths — a substitute (a different product) stays allowed. A fully refunded order counts as a return: when the store sends an order with status refunded, the engine treats every line of that order as returned (dated at the order's own date). Partial returns have to be sent line by line by the store. Recommendation rotation: reissue threshold 7 days (spread ±2 days per customer, so a large group doesn't refresh all at once on one night) / demotion 35 days. Diversity in tier 0: at most 2 products of the same brand and 3 of the same category. If the catalog carries too few brands to fill 9 slots under that cap (e.g. a single-brand store), the brand cap is automatically raised to the smallest value that still fills the slots — filling the email beats brand spread.

Last updated: 2026-08-04