> ## Documentation Index
> Fetch the complete documentation index at: https://algolia.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Send click and conversion events with InstantSearch.js

> Unlock Algolia's most powerful features by sending click and conversion events from your InstantSearch app.

## What are events?

Events are actions that users take on your app or website.
They unlock powerful features, such as recommendations,
personalization, smarter search results,
and analytics that help you optimize your user experience.

For more information, see [Choose how to send events](/doc/guides/sending-events/getting-started).

## How to send events

InstantSearch widgets can automatically send certain events if you enable the [`insights`](/doc/api-reference/widgets/instantsearch/js#param-insights)
option when setting up your app.

For a full guide to implementing events, see [Send events with InstantSearch](/doc/guides/sending-events/instantsearch/send-events).

## Default events

With the `insights` middleware, your InstantSearch widgets send default events.
To check the default events, go to the [**Events Debugger**](https://dashboard.algolia.com/events/debugger).

For more information, see [Validate your events](/doc/guides/sending-events/guides/validate).

### Default click events for refinement widgets

The following widgets send `click` events ("Filter Applied") when users select a refinement.
[Custom widgets](/doc/guides/building-search-ui/widgets/customize-an-existing-widget/js) using the connectors send the same events.

| Widget                                                                                 | Connector                 |
| -------------------------------------------------------------------------------------- | ------------------------- |
| [`hierarchicalMenu`](/doc/api-reference/widgets/hierarchical-menu/js#param-send-event) | `connectHierarchicalMenu` |
| [`menu`](/doc/api-reference/widgets/menu/js#param-send-event)                          | `connectMenu`             |
| [`menuSelect`](/doc/api-reference/widgets/menu-select/js#param-send-event)             | `connectMenu`             |
| [`ratingMenu`](/doc/api-reference/widgets/rating-menu/js#param-send-event)             | `connectRatingMenu`       |
| [`refinementList`](/doc/api-reference/widgets/refinement-list/js#param-send-event)     | `connectRefinementList`   |
| [`toggleRefinement`](/doc/api-reference/widgets/toggle-refinement/js#param-send-event) | `connectToggleRefinement` |

<Note>
  Numeric refinement widgets don't send `clicked` events as the `clickedFilters` event does not apply to numeric filters. This is relevant for `connectNumericMenu`- and `connectRange`-based widgets.
</Note>

### Default view events for results widgets

The following widgets send `view` events ("Hits Viewed") for the visible items in the search results.
[Custom widgets](/doc/guides/building-search-ui/widgets/create-your-own-widgets/js) using the connectors send the same events.

| Widget                                                                         | Connector             |
| ------------------------------------------------------------------------------ | --------------------- |
| [`autocomplete`](/doc/api-reference/widgets/autocomplete/js#param-indices)     | `connectAutocomplete` |
| [`geoSearch`](/doc/api-reference/widgets/geo-search/js#param-send-event)       | `connectGeoSearch`    |
| [`hits`](/doc/api-reference/widgets/hits/js#param-send-event)                  | `connectHits`         |
| [`infiniteHits`](/doc/api-reference/widgets/infinite-hits/js#param-send-event) | `connectInfiniteHits` |

### Default click events for results widgets

The following widgets send `click` events ("Hit Clicked") when users click a search result.

| Widget                                                                         | Connector                                                                                                      |
| ------------------------------------------------------------------------------ | -------------------------------------------------------------------------------------------------------------- |
| [`hits`](/doc/api-reference/widgets/hits/js#param-send-event)                  | [`connectHits`](/doc/api-reference/widgets/hits/js#customize-the-ui-with-connecthits)                          |
| [`infiniteHits`](/doc/api-reference/widgets/infinite-hits/js#param-send-event) | [`connectInfiniteHits`](/doc/api-reference/widgets/infinite-hits/js#customize-the-ui-with-connectinfinitehits) |

<Note>
  Because of technical limitations, the default `click` events aren't sent when using `connectHits` or `connectInfiniteHits`.
  If you're using connectors, make sure to set up `click` events on them.
</Note>

```js JavaScript theme={"system"}
function render(renderOptions, isFirstRender) {
  const { items, sendEvent, widgetParams } = renderOptions;

  widgetParams.container.innerHTML = `
    <ul>
      ${items
        .map(
          (item) =>
            `<li>
              ${instantsearch.highlight({ attribute: 'name', hit: item })}
            </li>`
        )
        .join('')}
    </ul>
  `;

  [...widgetParams.container.querySelectorAll('li')]
    .forEach((element, index) => {
      element.addEventListener('click', (event) => {
        sendEvent('click', hits[index], 'Hit Clicked');
      });
    });
}

const customHits = connectHits(render);
// or
const customInfiniteHits = connectInfiniteHits(render);
```
