Skip to content

    Pre-launch API. The concepts described here are settled, but the API shape is not: request and response fields, parameters and defaults can still change. Build against it, and talk to your Luigi's Box contact before you put an integration into production.

    Analytics overview

    View source

    Ranking learns from shopper behaviour: which results were shown, which were clicked, which were bought. Analytics events carry the shopper’s side of that to Luigi’s Box, and they are also what you report on.

    The same events serve both:

    Events give youEvents give ranking
    Search and listing performance reportsThe signal that a result worked
    Top queries, and queries with no resultsWhich items to recommend together
    Funnel and conversion metricsWhat a returning shopper is interested in
    Recommender and A/B test resultsThe training data behind ranking

    Without events, ranking cannot learn from your shoppers and there is nothing to report on.

    Luigi’s Box already records what it showed. The results a surface returned — which objects, in which order, for which query — are captured when the discovery request is served. You never send them.

    What Luigi’s Box cannot see is what the shopper did next. That is what you report:

    ReportAsNotes
    A click on a resultinteraction, interaction_type: "click"
    A cart additioninteraction, interaction_type: "add_to_cart"
    A completed ordertransaction

    See Event reference for the full field lists, and Sending events for how to send them.

    A shopper journey produces a few events that have to connect to each other:

    (recorded for you) a surface returned 24 products for "running shoes"
    interaction they clicked the third one
    interaction they added it to the cart
    transaction they bought it

    Two things hold that chain together:

    Links
    The reference on each eventThe event to the catalog object it is about
    A stable X-Lbx-Visitor-IdEverything one browser does, over time

    Both are yours to set correctly. The reference is what lets Luigi’s Box match the event against the result sets it recorded for that session, so a click is credited to the search that produced it. A reference that resolves to nothing produces an event that joins to nothing.

    user_id, when you have one, additionally links a signed-in shopper’s activity across devices.

    See Object references and Attribution.

    Every event carries consent_granted, and discovery requests carry the matching personalize flag. Read both from the same consent source, so a shopper’s choice applies consistently to what they see and to what is recorded.

    Events are about objects and result sets, not about people. There is no field for a name, an email address or an address; user_id is your own opaque key and you decide what it reveals. Do not put personal data in event fields — including in the free-form context map.

    See Personalization.

    Reporting is available in the Luigi’s Box Control Hub. Every report is scoped to one or more channels, over a date window, with optional segmentation.

    AreaAnswers
    Channel performanceHow is each storefront doing, and how does that trend?
    Search statisticsVolume, click-through rate, exit rate
    Top queriesWhat are shoppers looking for most?
    Queries with no resultsWhat is your catalog failing to answer?
    Recommender breakdownWhich placements are earning their space?
    Listing analysisHow do category and listing pages perform against search?
    Conversion funnelWhere does traffic come from and where does it drop out?
    Session explorerWhat did one shopper’s visit actually look like?
    BaselinesIs today’s click-through rate normal for this channel?

    Queries with no results lists demand your catalog does not currently meet, ranked by how often it comes up.

    • Report all three. A funnel with clicks and no purchases cannot compute conversion.
    • Check your references resolve. An event whose reference names no catalog object is recorded and then joins to nothing — see Object references.
    • Keep the visitor identifier stable. A visitor ID that changes per page load splits one shopper into many visitors.
    • Keep interaction_type values stable. Reporting groups on the exact string, so renaming one splits its history in two.