---
title: "Score Companies by Signal Activity"
method: POST
path: "/v3/companies/signal-score"
tags: ["Signals"]
---

# Score Companies by Signal Activity

`POST /v3/companies/signal-score`

Score companies by their active buying signals. Returns the aggregate Signal Score - a `[0, 1]` value reflecting the fraction of the company's active signals - plus the active signal breakdown.

Accepts up to 100 companies, each identified by exactly one of `id`, `domain`, `name`, or `email`. All identifiers are resolved to Lusha company IDs server-side before scoring.

Each result is one of:
- A **scored entry** - `signalScore`, `signalTypes`, and `noActiveSignals`.
- A **`NOT_FOUND`** entry - the company service could not resolve the supplied identifier.
- A **`NO_SCORE`** entry - the company resolved, but the scoring engine returned nothing for it.

> **Billing:** 1 credit is charged per scored row via `signal_score_company_reveal`. This action is currently limited-availability - while it isn't yet seeded on an account's pricebook, the endpoint stays free (`billing.creditsCharged` is `0`). Error rows (`NOT_FOUND` / `NO_SCORE`) are never charged.

## Request body

- V3SignalScoreCompaniesRequest
  - `companies` V3SignalScoreCompanyItem[], required
    - `clientReferenceId` string — Caller-supplied token echoed back on the matching result.
    - `id` string — Encrypted Lusha company ID (vN.…). Legacy numeric IDs accepted during the transition window.
    - `domain` string
    - `name` string
    - `email` string, email — Must be a valid email address; only the domain part is used for resolution. A malformed email is rejected with 400.

## Response `200`

Successful response

- V3SignalScoreCompaniesResponse
  - `requestId` string, uuid
  - `results` V3SignalScoreCompanyResult[]
    - `clientReferenceId` string
    - `id` string — Encrypted Lusha company ID for scored entries. On NOT_FOUND, echoes the supplied domain/name (or the derived domain, for an email request).
    - `name` string
    - `domain` string
    - `signalScore` number — Aggregate signal score - the fraction of the company's active signals. Absent on error entries.
    - `signalTypes` string[] — Signal types currently active for this company (canonical camelCase). Absent on error entries.
    - `noActiveSignals` boolean — True when the company resolved and scored but has no active signals (signalScore is 0). Absent on error entries.
    - `error` V3ItemError — Per-item error in a batch response
      - `code` 'NOT_FOUND' | 'COMPLIANCE_RESTRICTED' | 'ENRICH_FAILED' | 'NO_SCORE'
      - `message` string
  - `billing` V3Billing — Credit usage summary for a V3 API request
    - `creditsCharged` integer — Total credits charged for this request
    - `resultsReturned` integer — Number of successful results returned

## Other responses

- `400` — Bad request - invalid input data
- `401` — Unauthorized - invalid or missing API key
- `402` — Payment required - insufficient credits
- `403` — Forbidden - account inactive, V3 access not enabled, or plan does not include this feature
- `429` — Too many requests - rate limit exceeded

---

[API](https://skmtc.net/lusha/apis/lusha-api-documentation.md) · [All operations](https://skmtc.net/lusha/apis/lusha-api-documentation/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/lusha/lusha-api-documentation/revisions/8e62fb5a9414/schema)
