Before you begin
To follow this guide, you need to build both search results and category pages with one of these UI libraries:- InstantSearch.js version 4.59 or later (Upgrade guide)
- React InstantSearch version 7.2.1 or later (Upgrade guide)
- Vue InstantSearch version 4.12.0 or later (Upgrade guide)
Manage the Insights library
InstantSearch loads thesearch-insights
library for you from jsDelivr. You don’t need to install it or set it up yourself.
If you’re using a Content Security Policy to protect your site and you want to let InstantSearch load search-insights
for you, make sure to add https://cdn.jsdelivr.net
in your list of trusted sources for JavaScript.
search-insights
, you can add it to your project:
InstantSearch doesn’t load search-insights
when it detects it on the page.
Enable events collection
You can enable the automatic collection of events from your InstantSearch apps in the Algolia dashboard (without coding), or when setting up your InstantSearch app (with coding). Enabling automatic events collection takes care of the following:- Add the
search-insights
library to your project and make it globally available aswindow.aa
- Set an anonymous
userToken
for sending events to the Insights API and for search requests - Include the
queryID
parameter in the search response - Send default click and view events for your InstantSearch widgets
No code
- Go to the Algolia dashboard and select your Algolia application.
- On the left sidebar, select Data sources > Events > Settings.
- Click Enable automatic events collection.
Code
Enable theinsights
option:
Understand which events to track
You may want to send events that are not automatically captured by InstantSearch widgets. To understand which events you should send, think about the different steps a user takes through your website to reach the final goal: the product purchase.- Search results page
- Category page
- External referrals

- Select a product from the search results to open the product details page.
- Add a product to the shopping cart.
- Buy the product.
Search and search results pages
User action | Method name | Automatically collected? |
---|---|---|
User clicks search result | clickedObjectIDsAfterSearch | Yes |
User adds product to shopping cart | addedToCartObjectIDsAfterSearch | No |
User clicks categories/filters | clickedFilters | Yes |
User views search results | viewedObjectIDs | Yes |
Product listing and category pages
User action | Method name | Automatically collected? |
---|---|---|
User clicks product | clickedObjectIDsAfterSearch | Yes |
User adds product to shopping cart | addedToCartObjectIDsAfterSearch | No |
User views category page | viewedObjectIDs | Yes |
Product details page
User action | Method name | Automatically collected? |
---|---|---|
User adds product to cart | addedToCartObjectIDsAfterSearch | No |
User views product | viewedObjectIDs | No |
Checkout page
User action | Event | Automatically collected? |
---|---|---|
User buys product | purchasedObjectIDsAfterSearch | No |
Keep track of query IDs
Conversion events are often triggered on pages that InstantSearch doesn’t cover, such as your product details pages or the checkout page. To relate the conversion events back to the search request made on your search results or category pages, you need to keep track of the query IDs across your pages.Track add-to-cart events
Using InstantSearch widgets
When your users add an item to their cart, send a specialconversion
event with the addToCart
subtype.
Fields representing monetary values accept both numbers and strings,
in major currency units (for example,
5.45
or '5.45'
).
To prevent floating-point math issues, use strings, especially if you’re performing calculations.On pages without InstantSearch widgets
Add the following code to all components and pages where users can add products to their shopping cart. For add-to-cart events associated with a search:JavaScript
window.aa
object is the API client for the Insights API and is globally available
if you enabled automatic events collection.
The queryID
parameter is used by Algolia to relate the event to a prior search or browse event.
For add-to-cart events not related to a search query, for example, after a user clicks on a
‘Recommended for you’ or ‘Buy again’ carousel on the home page:
JavaScript
Track purchase events
Using InstantSearch widgets
When your users purchase an item, send a specialconversion
event with the purchase
subtype.
Fields representing monetary values accept both numbers and strings, in major currency units (for example,
5.45
or '5.45'
).
To prevent floating-point math issues, use strings, especially if you’re performing calculations.On pages without InstantSearch widgets
Add the following code to your checkout flow:JavaScript
Track other conversion events
You can track other conversions in addition to add-to-cart and purchase events.Using InstantSearch widgets
You can use thesendEvent
function to send conversion events from your InstantSearch app.
Setting custom
conversion
events doesn’t prevent the custom click
event from being sent.On pages without InstantSearch widgets
This is an example of a conversion that may occur on a page without InstantSearch:JavaScript
Track click events
Override default click events
Thehits
and infiniteHits
widgets expose a sendEvent
function. Use it to send click
events when users interact with your search results.
- A
click
event with theeventName
“Product Added to Favorites”. - A
click
event with theeventName
“Product Clicked” (through event propagation).
Event.stopPropagation
in your event handler.
click
event that you defined, it doesn’t send the default click
event.
In the following example, when users click the Add to favorites button, only the “Product Added to Favorites” event is sent:
Track additional click events
For Algolia Recommend and Personalization, capture additional click events when users select individual products:- On your home page
- From product recommendations
JavaScript
Optional: set up personalization
For effective personalization, you need to identify users across sessions. It’s best to use an identifier from your authentication, user profile, or ecommerce service after users sign in. For more information, see User token. After getting the identifier from your system, set it asauthenticatedUserToken
parameter.
JavaScript
JavaScript
JavaScript
Examples
- InstantSearch.js:
- React InstantSearch:
- Vue InstantSearch: