> For clean Markdown of any page, append .md to the page URL.
> For a complete documentation index, see https://docs.getedulead.com/llms.txt.
> For AI client integration (Claude Code, Cursor, etc.), connect to the MCP server at https://docs.getedulead.com/_mcp/server.

# SearchPeople

GET https://api.getedulead.com/v4/people/search

SearchPeople pages through the people matching every condition, most relevant first unless
 order_by says otherwise, 25 a page by default; or, with group_by, their accounts. Relevance
 ranks by the seniority of the role a role condition matched, the quality of the contact
 details and whether it is the person's only role; without a role condition it is priority,
 highest first. Every
 person a page returns counts toward the team's revealed contacts for the month (or billing
 year); a page that would take the team past its limit is refused and counts nothing.

Reference: https://docs.getedulead.com/api-reference/people/search

## Authentication

- `Authorization` header (bearer token, required) — A team API key, sent as `Authorization: Bearer <key>`.
- `Authorization` header (bearer token, required) — The Cognito access token of a signed-in Edulead user (`edulead auth login`), sent as `Authorization: Bearer <token>`.

## Request

### Query parameters

- `conditions` (string, optional) — A JSON array of up to 30 conditions, all of which must hold: \[\{"field": "titleRole", "operator": "equals", "value": "director"}, ...]. The fields and the operators each allows are those of the Edulead console's people search: among them titleRole, titleArea, institutionType, state, studentsTotal, institutionId, territoryId, shapes, lastSeen and fulltext. A comma in a value matches any of its parts ("TX,CA"). Institution conditions hold on one and the same institution of a person, role conditions on one and the same role; a role exclusion holds on every role. The grammar, every field with its operators and value: [https://docs.getedulead.com/search-conditions](https://docs.getedulead.com/search-conditions)
- `source` (enum, optional) — Set to keep the search in the caller's search history, as the console does: PEOPLE_SEARCH from people search, INSTITUTION_DETAIL from an institution's people, MAP_VIEW from the maps, BUYING_GROUPS from buying groups.
  - Allowed values: ``, `PEOPLE_SEARCH`, `INSTITUTION_DETAIL`, `MAP_VIEW`, `BUYING_GROUPS`
- `order_by` (enum, optional) — Sort order: a sortable field name, optionally followed by " desc". The allowed values are listed.
  - Allowed values: ``, `relevance`, `name`, `name desc`, `email`, `email desc`, `priority desc`
- `page_size` (integer, optional) — Number of items per page, at most the maximum shown. Omitted or 0 means the RPC's default page size.
- `page_token` (string, optional) — Opaque token from a previous response; empty for the first page.
- `group_by` (enum, optional) — account pages through the people's accounts instead, the most important first, each with its most valuable people in groups; order_by is ignored.
  - Allowed values: ``, `account`
- `people_per_group` (integer, optional) — With group_by, how many people each account carries; 0 is 10.

## Response

### 200

Success

- `items` (list of edulead.v4.Person, optional) — The page of results, in the requested order.
- `next_page_token` (string, optional) — Token for the next page; empty when this is the last page.
- `total_size` (string, optional) — How many people match the conditions, over every page; with group_by, how many accounts.
- `district_count` (string, optional) — How many districts the matching people belong to.
- `groups` (list of edulead.v4.PersonGroup, optional) — With group_by, the page of accounts.
- `person_total` (string, optional) — With group_by, how many people match over every account.
- `account_size_histogram` (list of edulead.v4.AccountSizeBand, optional) — With group_by and a condition selecting public institutions, how many matching accounts fall in each size band, counted without any accountNrStudents condition.

## Types

### edulead.v4.Person

Person is a person Edulead knows at one or more institutions. The values are the Edulead keystone's; zero values are omitted.

- `id` (string, optional) — Identifier of the resource, assigned by Edulead and opaque to callers.
- `name` (string, optional) — The full name.
- `first_name` (string, optional)
- `middle_name` (string, optional)
- `last_name` (string, optional)
- `title` (string, optional) — The title the person is shown with.
- `title_rank` (integer, optional, nullable) — The seniority of the title, 0 to 100; unset when no role was recognized.
- `email` (string, optional)
- `email_domain` (string, optional)
- `email_type` (string, optional) — Whether the address is a personal or a shared one, such as PERSONAL.
- `email_format` (string, optional) — How the address is built from the name, such as \{f}\{last}.
- `email_source` (string, optional) — Whether the address was seen (OBSERVED) or built from the institution's format and verified.
- `email_verification_status` (string, optional) — The verifier's verdict, such as VALID, CATCH_ALL or INVALID; empty when never verified.
- `email_verify_time` (datetime, optional) — A point in time in RFC 3339 format, with up to nanosecond precision. Output uses UTC (`Z`); input may use an offset from UTC.
- `phone` (string, optional)
- `phone_uniqueness` (string, optional) — Whether the phone number is the person's own (UNIQUE) or shared.
- `state` (string, optional) — The state's postal code of the person's first institution, such as TX.
- `account_id` (string, optional) — The account the person belongs to: the district of a public school, else the school.
- `account_priority` (double, optional) — How important the account is, 0 to 100, from its size.
- `account_student_count` (string, optional)
- `priority` (integer, optional) — How valuable the person is as a contact, 0 to 100: the title's seniority and the quality of the contact details.
- `labels` (list of string, optional)
- `bios` (list of edulead.v4.PersonBio, optional)
- `institutions` (list of edulead.v4.PersonInstitution, optional) — The institutions the person belongs to, a school before its district.
- `roles` (list of edulead.v4.PersonRole, optional) — The roles the person holds, from the titles they were seen with.
- `first_observe_time` (datetime, optional) — When the person was first and last seen.
- `last_observe_time` (datetime, optional) — A point in time in RFC 3339 format, with up to nanosecond precision. Output uses UTC (`Z`); input may use an offset from UTC.
- `fulltext_matches` (list of edulead.v4.PersonTextMatch, optional) — The pages of the institutions' websites that matched a fulltext condition, at most 20. Set by SearchPeople only, when it has one.
- `update_time` (datetime, optional) — When any field last changed.

### edulead.v4.PersonGroup

PersonGroup is one account (the district of a public school, else the school) and its most valuable people.

- `account_id` (string, optional)
- `name` (string, optional) — The account's institution's name.
- `priority` (double, optional) — How important the account is, 0 to 100.
- `person_count` (string, optional) — How many of the account's people match.
- `people` (list of edulead.v4.Person, optional) — The account's people, the most valuable first, at most people_per_group.

### edulead.v4.AccountSizeBand

AccountSizeBand is one band of the account-size histogram: accounts with min to max students (max 0: no upper bound).

- `min` (string, optional)
- `max` (string, optional)
- `account_count` (string, optional) — How many matching accounts fall in the band.

### edulead.v4.PersonBio

PersonBio is a published biography of the person.

- `text` (string, optional) — Free text to match. The RPC description says which fields it is matched against.
- `create_time` (datetime, optional) — When Edulead created the resource.

### edulead.v4.PersonInstitution

PersonInstitution is one institution a person belongs to.

- `institution_id` (string, optional) — The Institution's id.
- `name` (string, optional)
- `type` (string, optional) — DISTRICT, SCHOOL or AGENCY.
- `subtype` (string, optional) — As NCES classifies it, such as REGULAR or CHARTER.
- `access` (string, optional) — PUBLIC or PRIVATE.
- `state` (string, optional)
- `zip` (string, optional)
- `county_id` (string, optional) — The county's FIPS code.
- `student_count` (string, optional)
- `staff_count` (string, optional)
- `revenue_usd` (string, optional) — Annual revenue in whole US dollars.
- `nces_id` (string, optional)
- `nces_district_id` (string, optional)
- `address` (string, optional) — The physical address, as one line.
- `city` (string, optional)

### edulead.v4.PersonRole

PersonRole is one role a person holds.

- `code` (string, optional) — The role's code, such as director or teacher.
- `role` (string, optional)
- `area` (string, optional) — The area of work, such as curriculum and instruction.
- `modifier` (string, optional) — A qualifier of the role, such as assistant.
- `status` (string, optional) — Whether the role is current or past, such as former.
- `level` (string, optional)
- `system_status` (string, optional)
- `confidence` (double, optional) — How sure Edulead is of the role, 0 to 1.
- `rank` (integer, optional) — The role's seniority, 0 to 100.
- `decision_level` (string, optional) — Such as executive, director or practitioner.
- `functional_group` (string, optional)
- `market_themes` (list of string, optional)
- `evidence_count` (integer, optional) — How many sightings back the role.
- `first_observe_time` (datetime, optional) — A point in time in RFC 3339 format, with up to nanosecond precision. Output uses UTC (`Z`); input may use an offset from UTC.
- `last_observe_time` (datetime, optional) — A point in time in RFC 3339 format, with up to nanosecond precision. Output uses UTC (`Z`); input may use an offset from UTC.
- `evidence` (list of edulead.v4.PersonEvidence, optional) — The sightings, newest first as the keystone keeps them.

### edulead.v4.PersonTextMatch

PersonTextMatch is a page of an institution's website that matched a fulltext condition.

- `url` (string, optional)
- `snippet` (string, optional) — The matching passage as HTML, with each match inside \<em> tags.

### edulead.v4.PersonEvidence

PersonEvidence is one sighting behind a role.

- `id` (string, optional) — Identifier of the resource, assigned by Edulead and opaque to callers.
- `normalized_title` (string, optional) — The title seen, normalized.
- `source_type` (string, optional) — Where the person was seen: CRAWLER (a website) or FOIA (a public-records response).
- `match_method` (string, optional) — How the sighting was tied to the person, such as EMAIL or NAME_SCHOOL.
- `status` (string, optional)
- `first_name` (string, optional) — The names as seen.
- `middle_name` (string, optional)
- `last_name` (string, optional)
- `observe_time` (datetime, optional) — A point in time in RFC 3339 format, with up to nanosecond precision. Output uses UTC (`Z`); input may use an offset from UTC.
- `observations` (list of edulead.v4.PersonObservation, optional) — How the sighting was tied to institutions.
- `url` (edulead.v4.PersonEvidenceUrl, optional) — The page the person was seen on; unset for a public-records response.

### edulead.v4.PersonObservation

PersonObservation is how a sighting was tied to an institution.

- `institution_id` (string, optional)
- `resolution_method` (string, optional) — Such as EMAIL_DOMAIN or URL_DOMAIN.
- `resolution_value` (string, optional) — What matched, such as the domain.

### edulead.v4.PersonEvidenceUrl

PersonEvidenceUrl is the website page a person was seen on.

- `url_id` (string, optional)
- `url` (string, optional)
- `url_type` (string, optional) — Such as STAFF_DIRECTORY.
- `url_status` (string, optional)
- `screenshot_key` (string, optional) — Where the page's screenshot is kept.

## Examples

**Response**

```json
{
  "items": [
    {
      "id": "string",
      "name": "string",
      "first_name": "string",
      "middle_name": "string",
      "last_name": "string",
      "title": "string",
      "title_rank": 1,
      "email": "string",
      "email_domain": "string",
      "email_type": "string",
      "email_format": "string",
      "email_source": "string",
      "email_verification_status": "string",
      "email_verify_time": "2023-01-15T01:30:15.01Z",
      "phone": "string",
      "phone_uniqueness": "string",
      "state": "string",
      "account_id": "string",
      "account_priority": 1.1,
      "account_student_count": "string",
      "priority": 1,
      "labels": [
        "string"
      ],
      "bios": [
        {
          "text": "string",
          "create_time": "2023-01-15T01:30:15.01Z"
        }
      ],
      "institutions": [
        {
          "institution_id": "string",
          "name": "string",
          "type": "string",
          "subtype": "string",
          "access": "string",
          "state": "string",
          "zip": "string",
          "county_id": "string",
          "student_count": "string",
          "staff_count": "string",
          "revenue_usd": "string",
          "nces_id": "string",
          "nces_district_id": "string",
          "address": "string",
          "city": "string"
        }
      ],
      "roles": [
        {
          "code": "string",
          "role": "string",
          "area": "string",
          "modifier": "string",
          "status": "string",
          "level": "string",
          "system_status": "string",
          "confidence": 1.1,
          "rank": 1,
          "decision_level": "string",
          "functional_group": "string",
          "market_themes": [
            "string"
          ],
          "evidence_count": 1,
          "first_observe_time": "2023-01-15T01:30:15.01Z",
          "last_observe_time": "2023-01-15T01:30:15.01Z",
          "evidence": [
            {
              "id": "string",
              "normalized_title": "string",
              "source_type": "string",
              "match_method": "string",
              "status": "string",
              "first_name": "string",
              "middle_name": "string",
              "last_name": "string",
              "observe_time": "2023-01-15T01:30:15.01Z",
              "observations": [
                {
                  "institution_id": "string",
                  "resolution_method": "string",
                  "resolution_value": "string"
                }
              ],
              "url": {
                "url_id": "string",
                "url": "string",
                "url_type": "string",
                "url_status": "string",
                "screenshot_key": "string"
              }
            }
          ]
        }
      ],
      "first_observe_time": "2023-01-15T01:30:15.01Z",
      "last_observe_time": "2023-01-15T01:30:15.01Z",
      "fulltext_matches": [
        {
          "url": "string",
          "snippet": "string"
        }
      ],
      "update_time": "2023-01-15T01:30:15.01Z"
    }
  ],
  "next_page_token": "string",
  "total_size": "string",
  "district_count": "string",
  "groups": [
    {
      "account_id": "string",
      "name": "string",
      "priority": 1.1,
      "person_count": "string",
      "people": [
        {
          "id": "string",
          "name": "string",
          "first_name": "string",
          "middle_name": "string",
          "last_name": "string",
          "title": "string",
          "title_rank": 1,
          "email": "string",
          "email_domain": "string",
          "email_type": "string",
          "email_format": "string",
          "email_source": "string",
          "email_verification_status": "string",
          "email_verify_time": "2023-01-15T01:30:15.01Z",
          "phone": "string",
          "phone_uniqueness": "string",
          "state": "string",
          "account_id": "string",
          "account_priority": 1.1,
          "account_student_count": "string",
          "priority": 1,
          "labels": [
            "string"
          ],
          "bios": [
            {
              "text": "string",
              "create_time": "2023-01-15T01:30:15.01Z"
            }
          ],
          "institutions": [
            {
              "institution_id": "string",
              "name": "string",
              "type": "string",
              "subtype": "string",
              "access": "string",
              "state": "string",
              "zip": "string",
              "county_id": "string",
              "student_count": "string",
              "staff_count": "string",
              "revenue_usd": "string",
              "nces_id": "string",
              "nces_district_id": "string",
              "address": "string",
              "city": "string"
            }
          ],
          "roles": [
            {
              "code": "string",
              "role": "string",
              "area": "string",
              "modifier": "string",
              "status": "string",
              "level": "string",
              "system_status": "string",
              "confidence": 1.1,
              "rank": 1,
              "decision_level": "string",
              "functional_group": "string",
              "market_themes": [
                "string"
              ],
              "evidence_count": 1,
              "first_observe_time": "2023-01-15T01:30:15.01Z",
              "last_observe_time": "2023-01-15T01:30:15.01Z",
              "evidence": [
                {
                  "id": "string",
                  "normalized_title": "string",
                  "source_type": "string",
                  "match_method": "string",
                  "status": "string",
                  "first_name": "string",
                  "middle_name": "string",
                  "last_name": "string",
                  "observe_time": "2023-01-15T01:30:15.01Z",
                  "observations": [
                    {
                      "institution_id": "string",
                      "resolution_method": "string",
                      "resolution_value": "string"
                    }
                  ],
                  "url": {
                    "url_id": "string",
                    "url": "string",
                    "url_type": "string",
                    "url_status": "string",
                    "screenshot_key": "string"
                  }
                }
              ]
            }
          ],
          "first_observe_time": "2023-01-15T01:30:15.01Z",
          "last_observe_time": "2023-01-15T01:30:15.01Z",
          "fulltext_matches": [
            {
              "url": "string",
              "snippet": "string"
            }
          ],
          "update_time": "2023-01-15T01:30:15.01Z"
        }
      ]
    }
  ],
  "person_total": "string",
  "account_size_histogram": [
    {
      "min": "string",
      "max": "string",
      "account_count": "string"
    }
  ]
}
```

**SDK Code**

```python
import requests

url = "https://api.getedulead.com/v4/people/search"

headers = {"Authorization": "Bearer <apiKey>"}

response = requests.get(url, headers=headers)

print(response.json())
```

```javascript
const url = 'https://api.getedulead.com/v4/people/search';
const options = {method: 'GET', headers: {Authorization: 'Bearer <apiKey>'}};

try {
  const response = await fetch(url, options);
  const data = await response.json();
  console.log(data);
} catch (error) {
  console.error(error);
}
```

```go
package main

import (
	"fmt"
	"net/http"
	"io"
)

func main() {

	url := "https://api.getedulead.com/v4/people/search"

	req, _ := http.NewRequest("GET", url, nil)

	req.Header.Add("Authorization", "Bearer <apiKey>")

	res, _ := http.DefaultClient.Do(req)

	defer res.Body.Close()
	body, _ := io.ReadAll(res.Body)

	fmt.Println(res)
	fmt.Println(string(body))

}
```

```ruby
require 'uri'
require 'net/http'

url = URI("https://api.getedulead.com/v4/people/search")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <apiKey>'

response = http.request(request)
puts response.read_body
```

```java
import com.mashape.unirest.http.HttpResponse;
import com.mashape.unirest.http.Unirest;

HttpResponse<String> response = Unirest.get("https://api.getedulead.com/v4/people/search")
  .header("Authorization", "Bearer <apiKey>")
  .asString();
```

```php
<?php
require_once('vendor/autoload.php');

$client = new \GuzzleHttp\Client();

$response = $client->request('GET', 'https://api.getedulead.com/v4/people/search', [
  'headers' => [
    'Authorization' => 'Bearer <apiKey>',
  ],
]);

echo $response->getBody();
```

```csharp
using RestSharp;

var client = new RestClient("https://api.getedulead.com/v4/people/search");
var request = new RestRequest(Method.GET);
request.AddHeader("Authorization", "Bearer <apiKey>");
IRestResponse response = client.Execute(request);
```

```swift
import Foundation

let headers = ["Authorization": "Bearer <apiKey>"]

let request = NSMutableURLRequest(url: NSURL(string: "https://api.getedulead.com/v4/people/search")! as URL,
                                        cachePolicy: .useProtocolCachePolicy,
                                    timeoutInterval: 10.0)
request.httpMethod = "GET"
request.allHTTPHeaderFields = headers

let session = URLSession.shared
let dataTask = session.dataTask(with: request as URLRequest, completionHandler: { (data, response, error) -> Void in
  if (error != nil) {
    print(error as Any)
  } else {
    let httpResponse = response as? HTTPURLResponse
    print(httpResponse)
  }
})

dataTask.resume()
```