Match Companies and Contacts

B2B API

Match companies and contacts

Resolve company and contact records against Demandbase using the firmographic and person details you already have. Submit up to 30 uniquely identified records in one synchronous request and correlate each result with your original input ID.

POST /match Requires bearer token 1–30 requests per call Company and contact matching

What you can match

Each request can contain company evidence, contact evidence, or both. Supplying complementary attributes generally gives the service more context for selecting the best result.

Company

Resolve an organization

Match using a company name, website, ticker, location, phone number, or other available firmographic details.

Contact

Resolve a person and role

Add a name, title, email address, phone number, or LinkedIn handle to identify a contact associated with the company.

Combined match

Connect the person to the company

Submit company and contact attributes together to return the best contact match and its corresponding company.

Batch request

Match several records at once

Place up to 30 input objects in the requests array for synchronous matching.

Quality control

Filter contact quality

Use minContactQualityScore to require a minimum contact quality grade.

Correlation

Preserve your source identifier

The response returns each input id, making it straightforward to map results back to your records.

Common matching patterns

Match by company name and website

Request item
{
  "id": "account-001",
  "name": "Microsoft",
  "websites": ["microsoft.com"]
}

Match a contact at a company

Request item
{
  "id": "lead-002",
  "name": "Microsoft",
  "firstName": "Satya",
  "lastName": "Nadella",
  "title": "Chief Executive Officer"
}

Match by email

Request item
{
  "id": "lead-003",
  "email": "[email protected]",
  "isEmailRequired": true
}

Match multiple records

Request body
{
  "requests": [
    {"id": "account-001", "websites": ["microsoft.com"]},
    {"id": "account-002", "websites": ["apple.com"]}
  ]
}

Quickstart

Give every request a unique id and include enough company or contact information to identify the record.

Step 1

Send company and contact evidence

Request
curl --request POST \
  --url "https://uapi.demandbase.com/data/b2b/v1/match" \
  --header "Authorization: Bearer YOUR_ACCESS_TOKEN" \
  --header "Content-Type: application/json" \
  --header "Accept: application/json" \
  --data '{
    "requests": [
      {
        "id": "lead-001",
        "name": "Microsoft",
        "websites": ["microsoft.com"],
        "country": "United States",
        "firstName": "Satya",
        "lastName": "Nadella",
        "title": "Chief Executive Officer",
        "contactMatching": "active",
        "contactStatus": "current"
      }
    ],
    "limitResults": "10",
    "matchBranch": "false",
    "minContactQualityScore": "A"
  }'
Step 2

Correlate the match by ID

Illustrative response
{
  "matches": [
    {
      "id": "lead-001",
      "companyMatches": [
        {
          "company": {
            "name": "Microsoft Corporation",
            "city": "Redmond",
            "state": "WA",
            "country": "United States",
            "street": "1 Microsoft Way",
            "companyId": 726263
          }
        }
      ],
      "contactMatches": [
        {
          "contact": {
            "firstName": "Satya",
            "lastName": "Nadella",
            "title": "Chairman and CEO",
            "contactId": 310227204,
            "companyId": 726263,
            "dbPersonId": 243908534,
            "contactQualityScore": "A+",
            "active": true
          }
        }
      ]
    }
  ]
}
No match

An unmatched record is still a successful response

When no result meets the matching criteria, the API returns 200 OK with the input id and empty companyMatches and contactMatches arrays.

Request anatomy

Envelope

Provide the request array

The JSON body contains a required, non-empty requests array.

requests 1–30 match objects
Request item

Identify every source record

Each object needs a non-blank id that is unique within the request.

id Required correlation identifier
Headers

Authenticate and send JSON

Authenticate with a bearer token and identify the request body as JSON.

Authorization Bearer access token
Content-Type application/json
Accept application/json or application/xml
Minimum evidence

Include at least one identifying attribute

Every request item must contain at least one of name, websites, ticker, email, or executiveLinkedInHandle. Add location and contact details when available to provide more matching context.

Input fields

Only id is universally required. Provide the fields you know and omit unknown values instead of sending empty strings.

Company evidence

Organization attributes

nameCompany name
websitesArray of company websites or domains
tickerStock ticker
countryCountry
stateState or region
cityCity
streetStreet address
zipPostal code
phoneCompany or contact phone number
Contact evidence

Person and employment attributes

firstNameContact first name
lastNameContact last name
fullNameContact full name
titleCurrent or expected title
emailBusiness email address
executiveLinkedInHandleLinkedIn profile handle
isPhoneRequiredBoolean phone-match requirement
isEmailRequiredBoolean email-match requirement
contactMatchingactive to restrict matching to active contacts
contactStatuscurrent or all

Response anatomy

The top-level matches array contains a result for each submitted input ID.

Correlation

Match result

idYour original request identifier
companyMatchesMatched company records
contactMatchesMatched contact records
Company result

Company fields

companyIdDemandbase company ID
nameMatched company name
streetStreet address
cityCity
stateState or region
countryCountry
Contact result

Contact fields

contactIdDemandbase contact ID
dbPersonIdDemandbase Person ID
companyIdAssociated company ID
firstNameFirst name
lastNameLast name
titleCurrent title
contactQualityScoreContact quality grade
activeEmployment activity indicator
Additional contact context

Classification and location fields

Field Description Field Description
jobLevels Job-level IDs jobLevelCodes Job-level codes
jobFunctions Job-function IDs jobFunctionCodes Job-function codes
dbPersonCity Person city dbPersonState Person state or region
dbPersonCountry Person country
Correlation

Use the returned ID instead of array position

Associate each result with its source record using id. Do not rely on the response array using the same position as the request array.

Important rules

Required

Keep the requests array non-empty

Submit at least one request object and no more than 30 objects in a single API call.

Unique IDs

Assign one ID per input record

Every item needs a non-blank id, and duplicate IDs are not allowed within the same request.

Matching evidence

Provide a useful identifier

Each item must provide at least one of name, websites, ticker, email, or executiveLinkedInHandle.

Result limit

Stay within the supported range

limitResults must be from 1 through 20. The default is 10.

Quality score

Use a supported contact grade

When supplied, minContactQualityScore must be A+, A, B, or C.

Unknown values

Omit fields you do not know

Avoid placeholder text and empty strings. Send accurate attributes and leave unavailable optional fields out of the request.

Top-level parameters

Parameter Required Use it to Accepted value
requests Yes Provide the company and contact records to match. Array containing 1–30 objects
limitResults No Set the maximum number of matching candidates considered for each request. 1–20; default 10
matchBranch No Control whether company branch matching is enabled. "true" or "false"
minContactQualityScore No Set the minimum acceptable contact quality grade. A+, A, B, or C

Common errors

Status Error How to fix it
400-164 Required matching evidence is missing. Add name, websites, ticker, email, or executiveLinkedInHandle to every request item.
400-165 The match request has an empty requests list. Include at least one request object.
400-166 The request body is null or unreadable. Send a valid JSON body with Content-Type: application/json.
400-167 A request ID is missing, blank, or duplicated. Give every request item a unique, non-blank id.
400-168 The request contains more than 30 records. Split the input into batches of no more than 30, or use the bulk match workflow.
400-169 limitResults is outside the supported range. Set limitResults to a value from 1 through 20.
400-123 The minimum contact quality score is invalid. Use A+, A, B, or C.
401 Authentication failed. Generate a valid token and send it in the Authorization: Bearer YOUR_ACCESS_TOKEN header.
Related endpoints

Next steps

Try the synchronous endpoint, move larger datasets to the bulk match workflow, or retrieve complete records using the returned identifiers.

Try synchronous matching → · Bulk company and contact match → · Company details → · Contact details →