# Lead Scoring Contacts block

> CRM contacts data grid with lead score bars, weekly engagement trends, pinned rows and CRUD sheets

Lead scoring contacts table for sales teams: an AND and OR Filters builder, pinned rows, Hot, Warm and Cold score bars, weekly engagement with a 4-week trend, view and edit sheets, bulk status, CSV export and Undo. ReUI DataGrid, Filters, Frame.

- Type: Pro block
- Category: [Base](https://reui.io/blocks/data-grid/base.md)
- Page: https://reui.io/blocks/data-grid/base/data-grid-base-2
- Docs (Base UI): https://reui.io/docs/components/base/data-grid.md
- Docs (Radix UI): https://reui.io/docs/components/radix/data-grid.md
- MCP: `get_block("data-grid-base-2")`
- Built with: Alert Dialog, Avatar, Badge, Button, Cascader, Combobox, Data Grid, Dropdown Menu, Empty, Field, Filters, Frame, Input, Input Group, Kbd, Popover, Progress, Select, Separator, Sheet, Skeleton, Switch, Tabs, Tooltip
- Installs with a ReUI Pro or Ultimate license; setup: https://reui.io/docs/license-setup

## Best for

Contacts worked in lead score order, with Hot, Warm and Cold score bars, weekly engagement trends, pinned rows and full CRUD with Undo

## Agent notes

- Replace `CONTACTS`, `DEFAULT_PINNED` and the demo clock `TODAY` in data.tsx; `weekly` seeds each 16-week `engagement` series
- `useContactStore` changes only React state; send `createContact`, `updateContact`, `setStatus` and `removeContacts` to your API and keep each `undo`
- `contactFilterFields` and `matchesContactFilters` in contact-filters.tsx define the AND and OR rules; `scoreBand` in format.ts sets Hot, Warm and Cold

## When not to use

- Target accounts by company, with intent signals and saved prospect lists: use [Prospect Database](https://reui.io/blocks/data-grid/advanced/data-grid-advanced-22.md) (`get_block("data-grid-advanced-22")`)
- Renewal accounts that get a bulk owner or stage change on selected rows: use [Renewal Reassignment](https://reui.io/blocks/data-grid/filtering/data-grid-filtering-3.md) (`get_block("data-grid-filtering-3")`)

## Third-party libraries

- TanStack Table v9: [API reference](https://tanstack.com/table/v9/docs/framework/react/reference/index), [docs](https://tanstack.com/table/v9/docs/framework/react/quick-start)
- Sonner v2: [API reference](https://sonner.emilkowal.ski/toast), [docs](https://sonner.emilkowal.ski/getting-started)

## Install

```bash
npx shadcn@latest add @reui/data-grid-base-2
```

## About Base blocks

### When to use

- A whole table section: a title, a create button, filter controls, the rows and pagination
- Customer, contact and deal tables for a sales team, with a row menu, pinned rows or a rule filter bar
- Operations tables for support tickets, weekly timesheets, team members, project modules or SKU prices

### When not to use

- A bare table for your own columns and rows, without a title bar, toolbar or demo rows: use [Data Grid](https://reui.io/components/data-grid.md) (`get_component("data-grid")`)
- Thousands of rows in one scrolling list that loads more as the reader nears the end: use the [Virtualization blocks](https://reui.io/blocks/data-grid/virtualization.md)
- A payments ledger, a renewals queue or an automation library led by a rule filter bar: use the [Filtering blocks](https://reui.io/blocks/data-grid/filtering.md)

### Agent notes

- Each page.tsx wraps the table in a centered `min-h-svh` main under an sr-only `h1`; drop that wrapper and keep a single `h1` once it sits in your page
- Each block filters and pages its data.tsx rows in the browser with `pagination` in local state; move both to your API before the row count grows large

Every ReUI item has a twin like this one; the index is https://reui.io/llms.txt. Agents with the ReUI MCP (https://reui.io/docs/mcp) get the same guidance from the getters named above.
