Skip to content

Integrations · Product data

Your pairings, with nothing clever in between.

The routine suggestion on a product page is the one Refik surface where the assistant has no say at all. It reads the complementary products you have already set in Shopify and renders them. That is a smaller feature than “AI recommendations” and it is deliberately smaller: a pairing you chose is a pairing you can defend to a customer, and a pairing a model inferred from your titles is one you find out about from a complaint.

Status Working today Model calls in this block: zero Back to the full list

Where the data comes from

Shopify’s own field, read directly.

Shopify stores complementary products as a product field you fill in from the admin, usually through its own search-and-discovery tooling. The block reads that field on the product being viewed and nothing else — it does not look at order history, it does not look at what other shoppers bought, and it does not consult the knowledge base Refik builds for the rest of the assistant. If the field is set, the block has something to show; if it is not, it has nothing, and nothing is what it shows.

Input

One field on one product

The pairings you set for the product the shopper is looking at. Changing them in Shopify changes what the block renders, with no step in between that you have to remember.

Because the source is Shopify’s field rather than a copy of it, there is no sync to fall behind and no “refresh recommendations” button to look for.

Not input

Everything else

No purchase history, no shopper profile, no cross-store signal, and no inference from product text. The block cannot surprise you with a pairing, because it has no mechanism for producing one.

This is also the honest limitation: a store that has never filled the field gets a surface that never appears, and no amount of traffic will teach it anything.

Availability

Stock is checked twice, and the second time is the one that matters.

A pairing you set six months ago may point at something you no longer stock. The block filters on availability when it assembles the list and checks again as it renders each entry, so a product that went out of stock is simply not drawn rather than drawn with an apology next to it. Both checks read Shopify at render time, which is why this surface does not inherit the delay that applies to the descriptive knowledge elsewhere in Refik.

Why two checks and not one

The first pass decides which pairings are candidates at all. The second runs as each one is written out, alongside the count you set for how many to show, so the two decisions — is this buyable and have we shown enough — are taken in the same place rather than one of them being assumed from the other.

Practically it means the number of cards you see can be lower than the number you configured, and that is the correct behaviour: filling the row with an unavailable product to reach a target is how a block starts lying.

How many are shown

A setting on the block, which you control in the theme editor like every other Refik surface. There is no hidden default that overrides it and no minimum that forces a pairing into view.

The block also knows when it is being viewed inside the theme editor rather than by a shopper, so you can position it without its behaviour changing underneath you.

The empty case

When there is nothing to show, the block closes.

This is the part most worth reading, because the empty case is where recommendation widgets usually misbehave. There is no fallback to best sellers, no fallback to the same collection, and no placeholder row. A product with no pairings set renders no block at all, which keeps a product page honest and keeps the absence visible to you rather than hidden behind something generic.

No substitute is quietly supplied

A fallback would make the surface look complete on every product and make it impossible to tell which products you had actually curated. The closed block is a signal you can act on: it tells you exactly where the field is empty.

The pairing is rendered, not described

The entries are drawn by the theme block in Liquid. There is no generated sentence explaining why these products go together, because any such sentence would be an inference and this surface has deliberately been kept free of them.

Where Refik does explain a routine in words, it is a different surface with its own page, and the claims it makes are gated separately.

The routine suggestion in words

What a shopper sees if you change your mind

Clearing the field removes the block from that product on the next page view. There is nothing to uninstall and no cached copy of the old pairing to wait out.

Interface illustration, drawn from this page’s own account of the block — the pairings come from Shopify’s complementary-products field on the product being viewed and from nothing else, availability is read once as the list is assembled and again as each entry is written out, and both reads go to Shopify at render time. The dashed box is the empty case the section describes: when nothing survives the checks the block closes rather than filling the row with something generic. No number here is a measured figure.

The limits of this page

This is a renderer, and it inherits whatever you put in.

The quality of the pairings is entirely yours. Refik does not rank them, does not reorder them by anything it has learned, and does not notice if two of them contradict each other. It also makes no claim about what this does to a basket: there is no measured figure here for added revenue, attachment rate or anything similar, because we have not measured one and a number we have not measured is not a number we will print.

Not covered: pairings across collections rather than per product, any pairing suggested by Refik for you to approve, and behaviour on a product with variants whose availability differs between them. The first two do not exist; the third exists and has not been measured on a real store.