Score Contacts by Signal Activity
Score contacts by their active buying signals. Returns the aggregate Signal Score - a [0, 1] value - plus the active signal breakdown per contact.
Accepts up to 100 contacts. Each contact is resolved to a Lusha person ID and company ID server-side (identity only - no PII is revealed) before scoring. Provide one of:
- id (encrypted Lusha contact ID)
- linkedinUrl
- firstName + lastName + (companyName or companyDomain)
Each result is one of:
- A scored entry - signalScore, signalTypes, and noActiveSignals.
- A NOT_FOUND entry - identity resolution failed for the supplied identifier.
- A NO_SCORE entry - the contact resolved, but the scoring engine returned nothing for it.
Note: A full outage of the identity-resolution provider is never masked as NOT_FOUND - it returns a retryable 502 instead, so callers can retry rather than treating the batch as authoritatively unresolved.
Billing: 1 credit is charged per scored row via signal_score_contact_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
Example request
{
"contacts": [
{
"clientReferenceId": "ref-1",
"id": "v1.AbCdEfGhIjKlMnOpQrStUvWxYz012345",
"linkedinUrl": "https://linkedin.com/in/johndoe",
"email": "jane.doe@acme.com",
"firstName": "Jane",
"lastName": "Doe",
"companyName": "Acme Corp",
"companyDomain": "acme.com"
}
]
}Response
Successful response
Example response
{
"requestId": "5d6f13d2-f6b0-4e55-85d5-04e17f932c1a",
"results": [
{
"clientReferenceId": "ref-1",
"id": "v1.AbCdEfGhIjKlMnOpQrStUvWxYz012345",
"fullName": "Jane Doe",
"company": {
"id": "v1.6789ZyXwVuTsRqPoNmLkJiHgFeDcBa01",
"name": "Acme Corp",
"domain": "acme.com"
},
"signalScore": 0.3,
"signalTypes": [
"promotion"
],
"error": {
"code": "NOT_FOUND",
"message": "Contact not found"
}
}
],
"billing": {
"creditsCharged": 3,
"resultsReturned": 1
}
}