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

# Personalization implementation checklist

> Use the implementation checklist to make sure your Personalization implementation is ready to go live.

export const UserProfile = () => <Tooltip tip="A user profile contains data about a single user, including behavior, preferences, and affinities collected from events. Algolia uses this data to deliver personalized content.">
    user profile
  </Tooltip>;

export const Index = () => <Tooltip tip="An Algolia index is a searchable dataset that consists of records and configuration settings. These settings define how the records are searched and ranked.">
    index
  </Tooltip>;

export const Filter = () => <Tooltip tip="A filter is a condition that limits which records Algolia returns. Filters often use one or more facet-value pairs, such as brand:Apple AND color:red. You can also filter by numeric values, dates, tags, booleans, or geographic constraints." cta="Filtering" href="/doc/guides/managing-results/refine-results/faceting">
    filter
  </Tooltip>;

export const Events = () => <Tooltip tip="An event is a specific action a user takes in your app or on your website." cta="Events" href="/doc/guides/sending-events">
    events
  </Tooltip>;

export const Affinity = () => <Tooltip tip="Affinity is a preference score that Algolia calculates for each user based on their behavior. It reflects how likely a user is to prefer a specific facet-value pair and helps personalize their search results." cta="Affinity" href="/doc/guides/personalization/advanced-personalization/configure/prerequisites/consider-requirements-limits#affinities">
    affinity
  </Tooltip>;

<Callout icon="credit-card" color="#c084fc">
  This feature isn't available on every plan.
  Refer to your [pricing plan](https://www.algolia.com/pricing) to see if it's included.
</Callout>

## Gather user data

To implement effective personalization,
start by collecting the right user data.
When users perform specific actions, send Algolia <Events /> that describe those actions.
Algolia uses these events to build individual user <Affinity /> profiles.
Before you begin sending events,
analyze your users' behavior and plan which corresponding events you'll send.

### You've analyzed which user behaviors are meaningful for your business objectives

* You've made a comprehensive list of behaviors your users take that signal their affinities.
* You've [classified behaviors as `view`, `click`, or `conversion`](/doc/guides/sending-events/concepts/event-types).
* You've [classified behaviors as search-related or not](/doc/guides/sending-events/concepts/event-types).
* You've [classified behaviors as item-based or category-based](/doc/guides/sending-events/guides/plan).
* You've selected consistent event names.

### You're sending valid events that capture all necessary information

* All your events include a unique [`userToken`](/doc/api-reference/api-parameters/userToken) for the user engaging in the behavior.
* You are using [`view`, `click`, and `conversion` events](/doc/guides/sending-events/concepts/event-types) for the appropriate behavior.
* All your events include a valid `eventName`.
* All your events include the <Index /> name where you've declared the [applicable facets](/doc/guides/personalization/classic-personalization/personalizing-results/in-depth/configuring-personalization#weighting-facets-for-personalization) as [`attributesForFaceting`](/doc/api-reference/api-parameters/attributesForFaceting).
* If you're sending events related to a search, you've included the `queryID`.
* If you're sending item-based events, you've included the relevant `objectID`.
* If you're sending category or <Filter />-based events, you've included the relevant `filters`.
* Optional but recommended: you've included the `timestamp` for when the behavior occurred.

For more information, see the [Insights API reference](/doc/rest-api/insights).

You can use the [Insights log debugger](https://dashboard.algolia.com/events/debugger) in your dashboard to monitor the received events and ensure that none of them are missing fields or returning errors.

## Configure your personalization strategy

A personalization strategy determines how Algolia computes a <UserProfile /> using the events you send.
You can [configure the personalization strategy in the Algolia dashboard](/doc/guides/personalization/classic-personalization/personalizing-results/in-depth/configuring-personalization) or with the [API clients](/doc/libraries/sdk/methods/personalization).
The dashboard is recommended because it includes a visual simulator that helps you preview and understand how your strategy affects search results.

### You've defined a valid personalization strategy

* You've [included and weighted events](/doc/guides/personalization/classic-personalization/personalizing-results/in-depth/configuring-personalization#weighting-events-for-personalization) in your strategy.
* You're sending the events that you chose in the strategy. You can see the events received during the last 90 days in the [**Personalization** section](https://dashboard.algolia.com/personalization/strategy) of the dashboard.
* You've [included and weighted facets](/doc/guides/personalization/classic-personalization/personalizing-results/in-depth/configuring-personalization#weighting-facets-for-personalization) in your strategy. To select facets for the strategy, you need to [declare the attributes as facets](/doc/guides/managing-results/refine-results/faceting/how-to/declaring-attributes-for-faceting).
* You're sending events related to the facets you chose in the strategy.
* You've set a non-zero [Personalization impact](/doc/guides/personalization/classic-personalization/personalizing-results/in-depth/configuring-personalization#defining-personalization-impact). You can set the Personalization impact at the app level in your Personalization dashboard, or with the [`personalizationImpact`](/doc/api-reference/api-parameters/personalizationImpact) search parameter, at query time.

### You've simulated your strategy for real users

You've [used the simulator](/doc/guides/personalization/classic-personalization/personalizing-results/in-depth/configuring-personalization#simulating-personalization) in the dashboard's [**Personalization** section](https://dashboard.algolia.com/personalization/strategy) to simulate your strategy for various users and queries. The personalized results are as you would expect.

## Turn on personalization on searches

Personalized searches build on a user's affinity profile to boost search results related to their preferences.
It's best to use the [API clients](/doc/libraries/sdk/methods/search) or [InstantSearch UI libraries](/doc/guides/building-search-ui/what-is-instantsearch/js) to perform searches.

### You're including `enablePersonalization` and `userToken` in your search requests

* You've set [`enablePersonalization`](/doc/api-reference/api-parameters/enablePersonalization) to `true` either as a search parameter or in the index configuration.
* You're using consistent [`userToken`](/doc/api-reference/api-parameters/userToken)s in events and searches. To have personalized results, you must use the same [`userToken`](/doc/api-reference/api-parameters/userToken) for the events you send for a particular user and the searches that user makes.

<Info>
  If you haven't sent events for a particular [`userToken`](/doc/api-reference/api-parameters/userToken) in the last 90 days, Algolia doesn't personalize that user's results.
</Info>

## Next steps

Before enabling Personalization for all your users,
it's best to [A/B test your implementation](/doc/guides/personalization/classic-personalization/going-to-production/how-to/ab-testing-personalization).
