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

# Contact Scoring

> Build models that grade individual contacts from 0 to 100 based on the activity and profile signals that show buying intent.

> [!NOTE]
>
> Contact Scoring is coming soon

Contact Scoring lets you build models that grade individual contacts from 0 to 100 based on the activity and profile signals that show buying intent. Use it to find marketing-qualified and product-qualified leads, route hot contacts to sales the moment they qualify, and keep cold contacts in nurture. Each model writes its score to fields on the contact, so you can use it in dynamic lists, journey branches, and triggers like any other contact field.

Contact Scoring works alongside [Account Scoring](https://docs.inflection.io/database/account-scoring.md). Both model types live on the same **Scoring** page.

> [!NOTE]
>
> **Permissions:** Workspace admins can create signals and create, edit, activate, and pause scoring models. Users with view-only access can open models and signals but cannot change them.

## How Contact Scoring Works

A contact scoring model has three parts:

1. **Signals:** reusable conditions that describe a behavior or trait, such as visiting the pricing page or holding a director-level title.
2. **Weights:** each signal sits in the positive or negative bucket of a model with a weight that sets how much it counts.
3. **Enrollment:** a model scores only the contacts you enroll in it, usually with a journey step.

### How the Score Is Calculated

The score is the share of the model's total signal weight that a contact matches. Matched positive signals add their weight, matched negative signals subtract theirs, and the result is scaled to 0 to 100. Scores never drop below 0 or go above 100. A contact who matches no signals scores 0.

For example, a model has three positive signals: **Submitted a demo request** (weight 8), **Visited pricing page** (weight 5), and **Invited a teammate** (weight 3). The total weight is 16.

* A contact who submitted a demo request and visited the pricing page scores (8 + 5) ÷ 16 × 100 = 81.
* A contact who only submitted a demo request scores 8 ÷ 16 × 100 = 50.
* A contact who matches nothing scores 0.

## Create Signals

Signals are reusable conditions. Create a signal once, then add it to as many contact scoring models as you need.

1. Click **Scoring** in the left navigation, then under **Signals**, click **Contact**.
2. Click **New signal**.
3. Enter a **Signal name**, for example Viewed pricing page.
4. Under **Signal criteria**, click **Add event** and choose **Marketing event**, **Product event**, or **Contact event**. Then pick the event and set its conditions. Each signal checks one event.
5. Click **Create signal**.

![Contact signals list with the New signal button in the top right](https://mintcdn.com/inflection-4b2c0de4/nY7-6NWJ4L5K3bSk/images/database/contact-scoring/01.png?fit=max\&auto=format\&n=nY7-6NWJ4L5K3bSk\&q=85\&s=3710eb7feb3a0f99caf6a19a3806d6e3)

The **New signal** drawer opens on the right:

![New signal drawer with name, description, and one condition](https://mintcdn.com/inflection-4b2c0de4/nY7-6NWJ4L5K3bSk/images/database/contact-scoring/02.png?fit=max\&auto=format\&n=nY7-6NWJ4L5K3bSk\&q=85\&s=714678de938f9d74d7094a08a9f764af)

A signal can check any of these sources:

| Source | Example signal |
| - | - |
| Marketing event | Submitted the demo request form |
| Product event | Invited a teammate |
| Contact event | Job title changed to Chief Technology Officer |

> [!NOTE]
>
> Signals cannot be edited after you create them. To change a signal, create a new one, swap it into your models, and delete the old one.

## Create a Contact Scoring Model

1. Click **Scoring** in the left navigation, then click **New scoring model** in the top right.
2. Under **Model type**, select **Contact**.
3. Under **Model name**, enter a name, for example MQL Score. The name becomes the prefix of the fields the model writes to.
4. Click **Create**.

![New scoring model drawer with Contact scoring selected and the model name entered](https://mintcdn.com/inflection-4b2c0de4/nY7-6NWJ4L5K3bSk/images/database/contact-scoring/03.png?fit=max\&auto=format\&n=nY7-6NWJ4L5K3bSk\&q=85\&s=e012870ea871cd58cd0d046093b8f68d)

A new model starts in **Draft** status. Draft models do not score any contacts.

### Get Suggested Signals

When you create a contact scoring model, Inflection opens a setup step that can suggest signals for you. Inflection uses AI to read your business context and the signals you already have, then proposes positive and negative signals with weights.

1. Under **What should this model score for?**, describe your goal in a sentence or two, or click a starter: **MQL identification**, **Product-qualified leads**, **ICP fit**, or **Churn risk**.
2. Click **Suggest signals**.
3. Review the suggestions. Each one shows its source, its suggested weight, and why it was suggested. A signal marked **New** does not exist yet and is created when you apply it. **Things to consider** lists tips about the suggestions.
4. Clear the checkbox on any signal you don't want.
5. Click **Apply**. Inflection creates the selected signals, adds them to the model with the suggested weights, and opens the model page.

![Model setup step asking what the model should score for, with starter options and the Suggest signals button](https://mintcdn.com/inflection-4b2c0de4/nY7-6NWJ4L5K3bSk/images/database/contact-scoring/04.png?fit=max\&auto=format\&n=nY7-6NWJ4L5K3bSk\&q=85\&s=98a84b35edf5e15edfad691409f55464)

To build the model yourself, click **Skip — I'll pick signals myself**.

> [!NOTE]
>
> Suggestions are a starting point. Review every signal and weight on the model page before you activate the model.

### Add Signals to the Model

The model page shows **Available signals** on the left and the signal buckets on the right.

1. Drag a signal from **Available signals** into **Positive signals** to raise the score when a contact matches it, or into **Negative signals** to lower it.
2. Click a signal in a bucket to adjust its weight. A higher weight means the signal counts for more.
3. To change several weights at once, click **Customize weights** above a bucket. The **Customize Signal Weights** window shows each signal's share of the total weight. Adjust the weights, then click **Confirm**.
4. Click **Save**.

![Model page with Available signals on the left and Positive and Negative signal buckets on the right](https://mintcdn.com/inflection-4b2c0de4/nY7-6NWJ4L5K3bSk/images/database/contact-scoring/05.png?fit=max\&auto=format\&n=nY7-6NWJ4L5K3bSk\&q=85\&s=3120540ca9e12ad21a8ba436519239af)

![Customize Signal Weights window showing each signal's weight and share of the total](https://mintcdn.com/inflection-4b2c0de4/nY7-6NWJ4L5K3bSk/images/database/contact-scoring/06.png?fit=max\&auto=format\&n=nY7-6NWJ4L5K3bSk\&q=85\&s=d55a4f09c40b8d8b7e5f811c11bcdb13)

> [!NOTE]
>
> To create a signal without leaving the model, click **New signal** in the **Available signals** panel. The new signal appears in the panel, ready to drag into a bucket.

### Set Score Categories

Categories group scores into bands, such as Cold, Warming, and Marketing Qualified. The model writes the contact's current band to `<Model>.CurrentCategory` and the highest band they have reached to `<Model>.PeakCategory`.

1. On the model page, turn on **Categorization**. It starts with three bands: Cold (score 0 and up), Warming (50 and up), and Marketing Qualified (80 and up).
2. Rename a band or change the score where it starts. A contact is placed in the highest band whose starting score they reach.
3. Click **Add band** to add a band, or click the delete icon on a band to remove it.
4. Click **Save**.

Every band needs a unique name, the lowest band must start at 0, and each band must start at a higher score than the one before it. To stop writing categories, turn off **Categorization** and click **Save**.

### Activate the Model

When the model is ready, click **Save**, then click **Activate**. The model status changes to **Active**. **Activate** is available once the model has at least one signal, your changes are saved, and its contact fields are ready.

To change an active model, edit its signals, weights, categories, or AI reason, then click **Save**. To stop scoring for a while, click **Pause**. Click **Activate** to start again.

## Enroll Contacts in Scoring

A contact scoring model scores only the contacts whose `<Model>.ScoringEligible` field is true. Contacts are never enrolled automatically, which keeps scoring focused on the contacts you care about.

Enroll contacts from a journey with the **Update value** flow step:

1. Open a journey and add an **Update value** step to the canvas.
2. Choose the model's `<Model>.ScoringEligible` field and set it to true.
3. Publish the journey.

You can also set `<Model>.ScoringEligible` through an inbound webhook or a data sync.

Once a contact is enrolled, their score updates in real time as their activity arrives. To stop scoring a contact, set the field to false. The contact keeps their last score, and it stops updating.

## How Scores Appear on the Contact

Each contact scoring model writes these fields to the contact. The prefix is the model name with spaces removed, so a model named MQL Score writes `MQLScore.CurrentScore`.

| Field | What it holds |
| - | - |
| `<Model>.CurrentScore` | The contact's current score, from 0 to 100 |
| `<Model>.CurrentCategory` | The category the current score falls in |
| `<Model>.PeakScore` | The highest score the contact has reached |
| `<Model>.PeakCategory` | The highest category the contact has reached. It does not go down when the current score drops. |
| `<Model>.Reason` | The AI reason: a plain-language explanation of the score, generated from the contact's signals. See [Give Sales the AI Reason](#give-sales-the-ai-reason) below. |
| `<Model>.ScoringEligible` | Whether the contact is enrolled in the model |

The model page lists these fields under **Writes to contact**.

## Give Sales the AI Reason

A score tells sales that a contact is ready. The AI reason tells them why. When a contact's score crosses the threshold you set, Inflection generates the reason from the contact's signals: which positive signals they matched and which negative signals pulled the score down. It writes a short, plain-language explanation to the model's `<Model>.Reason` field, so sales can open a conversation with real context instead of asking what the lead did.

For example:

> Jane crossed 80 after submitting a demo request and visiting the pricing page three times. She also logged into the product. No negative signals matched.

### How the AI Reason Is Written

* **Written when the contact qualifies.** The reason is generated once, when the contact's score first crosses the threshold (80 by default). It is not rewritten on every score change.
* **Generated from the signals.** The reason describes the signals that pushed the contact over the threshold, such as a demo request, repeated pricing-page visits, or product activity, and any negative signals that counted against them.
* **Kept on the contact.** Once written, the reason stays on the contact. It is not cleared if the score later drops, so sales sees the explanation that was true at handoff.

### Turn On the AI Reason

1. Open a **contact scoring model**.
2. Turn on **AI reason**. It is off by default.
3. Next to **Generate when score ≥**, set the threshold. It is 80 by default. Match it to the score where your qualified category starts.
4. Click **Save**.

### Share the AI Reason With Sales

The AI reason is a contact field, so you can put it wherever sales works:

* **On the contact record.** The reason appears with the contact's other fields in Inflection.
* **In an alert.** Add the reason to a **Send internal email alert** step that fires when a contact reaches your qualified category, so the owner gets the context with the notification.

## Use Scores in Audiences and Journeys

Score fields are regular contact fields, so they work everywhere other contact fields do.

### Filter a Dynamic List by Score

In the audience builder, add a person property filter on the model's score field, for example `MQLScore.CurrentScore` greater than 70. As scores change, contacts move in and out of the list automatically.

### Branch and Trigger Journeys by Score

On the Journey Canvas, use **Branch by value** on the category field to route contacts, for example sending Marketing Qualified contacts to sales and everyone else to nurture. Use **Branch by filter** to split on a score threshold.

> [!NOTE]
>
> Learn more about branching: [Journey Flow Steps Reference](https://docs.inflection.io/journeys/journey-flow-steps.md)

## Manage Models and Signals

### Archive a Model

Archiving removes a model from the **Scoring** list and stops it from updating scores. Its fields stay on your contacts, so dynamic lists, journeys, and integrations that use them keep working.

1. Pause the model if it is active. Active models cannot be archived.
2. On the **Scoring** page, click the actions menu on the model's row, then click **Archive**.
3. Click **Archive** to confirm.

To find archived models, turn on **Show archived** on the **Scoring** page. To restore one, click the actions menu on its row, then click **Unarchive**.

### Delete a Signal

On the **Contact Signals** page, click the actions menu on a signal's row, then click **Delete**. You can only delete a signal that no model uses. Remove it from every model first.

![Scoring models list with model type, status, and the actions menu on each row](https://mintcdn.com/inflection-4b2c0de4/nY7-6NWJ4L5K3bSk/images/database/contact-scoring/07.png?fit=max\&auto=format\&n=nY7-6NWJ4L5K3bSk\&q=85\&s=0c2fb0cff763152228366d48233e145a)

## Common Use Cases

* **Identify marketing-qualified leads.** Score demo requests, pricing page visits, and email engagement. Route contacts to sales when their category reaches Marketing Qualified.
* **Hand off with context.** When a contact reaches Marketing Qualified, alert the owner and include the AI reason so the first call starts from what the contact actually did.
* **Find product-qualified leads.** Score product activity such as completing onboarding, inviting teammates, and using core features to find trial users ready for a sales conversation.
* **Filter out poor-fit contacts.** Add negative signals such as a personal email domain or an unsubscribe so those contacts score lower.
* **Prioritize within a key account.** Combine a contact score with the account's Account Scoring field to find the most engaged people at your best-fit accounts.

## Frequently Asked Questions

> [accordion] Which contacts does a model score?
>
> Only contacts whose `<Model>.ScoringEligible` field is true. Set it with the **Update value** journey step, an inbound webhook, or a data sync. Contacts who are not enrolled have no score for that model.

> [accordion] Does the AI reason change when the score changes?
>
> No. The reason is generated once from the contact's signals, when the contact first crosses the threshold. It stays on the contact even if the score drops later.

> [accordion] Can I edit an active model?
>
> Yes. Change its signals, weights, categories, or AI reason, then click **Save**.

> [accordion] Can a signal check more than one event?
>
> No. Each signal checks one event. To score a combination of behaviors, create a signal for each one and add them all to the model.

> [accordion] Can I edit a signal after creating it?
>
> No. Create a new signal with the updated criteria, replace the old one in your models, then delete the old signal.

> [accordion] Can Inflection suggest signals for me?
>
> Yes. When you create a contact scoring model, describe your goal or pick a starter, and Inflection suggests signals and weights for you to review. See [Get Suggested Signals](#get-suggested-signals) above.

> [accordion] How can I test a model?
>
> Activate the model, then enroll a test contact and check their `<Model>.CurrentScore` field.

## Additional Resources

* [Account Scoring](https://docs.inflection.io/database/account-scoring.md)
* [Building Audiences](https://docs.inflection.io/database/building-audiences.md)
* [Journey Flow Steps Reference](https://docs.inflection.io/journeys/journey-flow-steps.md)


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.