URL: /code/data/people · Id: `page:/code/data/people`

# People

> A Prospect is “a person or Organization a startup found but who has never engaged”: size the role, list the people, reach each one.

A [Prospect](https://startupbuilder.dev/business/nouns/prospect) is “a person or [Organization](https://startupbuilder.dev/business/nouns/organization) a [startup](https://startupbuilder.dev/business/nouns/startup) found but who has never engaged”: size the role, list the people, reach each one.

- **Noun:** [Prospect](https://startupbuilder.dev/business/nouns/prospect)
- **Calls:** 7
- **Emits:** `Prospect.counted`, `Prospect.found`, `Prospect.verified`, `ContactPoint.found`, `ContactPoint.verified`, `Contact.enriched`

A Data Verb reads the market and returns a reading. A Software Verb changes your records and emits an Event. Every call here is a Data Verb: it reads, and it changes a record only where its Effects say so.

## Properties
| Field | Type | What `null` means |
| --- | --- | --- |
| `count` | `number`, in people | Never null: 0 means no one matched. |
| `withEmail` | `number \| null`, in people | The source does not say how many have a work email on file. |
| `ignored` | `string[]` | Never null: empty when every filter you sent was applied. |
| `observedAt` | `string`, in ISO 8601 | Never null. |
| `method` | `Observed['method']` | Never null; counts read `'estimated'`. |
| `prospects` | `Prospect[]` | Never null: empty when no one matched, at $0. |
| `prospects[].kind` | `'person' \| 'creator' \| 'engager'` | Never null: the shape of the row, as `kind` asked. |
| `prospects[].name` | `string` | Never null. |
| `prospects[].title` | `string \| null` | Unknown. |
| `prospects[].seniority` | `'owner' \| 'c-level' \| 'vp' \| 'director' \| 'manager' \| 'individual' \| null` | Unknown. |
| `prospects[].organization` | `{ name: string; hostname: Hostname \| null } \| null` | No current employer on record. |
| `prospects[].location` | `string \| null` | Unknown. |
| `prospects[].profileUrl` | `string \| null` | No public profile was found. |
| `prospects[].hasEmail` | `boolean \| null` | The source does not say. Revealing the address is `ContactPoint.findEmail` or `Prospect.verify`. |
| `prospects[].reason` | `string` | Absent on a plain filter: why this row, from the sentence, the role rank or the comment left. |
| `prospects[].creator` | `{ venue: VenueId; handle: string; followers: number; engagementRate: number \| null }` | Absent unless `kind` is `creator`. |
| `prospects[].engaged` | `{ post: string; as: 'reaction' \| 'comment'; text: string \| null; at: string }` | Absent unless `kind` is `engager`. |
| `prospects[]` | [`Observed`](/code/data/types#observed) | Each row also carries `observedAt` and `method`, and `venue` and `locale` where the reading has them. |
| `after` | [`Cursor`](/code/data/types#cursor) | The last page: there are no more rows. |
| `total` | `number \| null`, in people | The source does not report a total. |
| `cost` | [`Cost`](/code/data/types#cost), in USD | Never null. In try mode `usd` is 0 and `maxUsd` is what the call would have cost. |
| `prospect` | `Prospect` | Never null: the Prospect the result was written onto. |
| `emails` | `{ address: string; result: EmailResult; checkedAt: string }[]` | Never null: empty when no address was found, at $0. |
| `emails[].result` | [`EmailResult`](/code/data/types#emailresult) | Never null on a found address. |
| `phones` | `{ number: string; lineType: 'mobile' \| 'landline' \| 'voip' \| null; checkedAt: string \| null }[]`, in E.164 | Never null: empty unless `reach` holds `phone` and a number was found. |
| `reachable` | `boolean` | Never null: `true` when at least one address is `deliverable`. |
| `address` | `string \| null` | No route found an address: a miss, and free. |
| `confidence` | `number \| null`, in score 0 to 1 | No address, or the route gives no confidence. |
| `result` | [`EmailResult \| null`](/code/data/types#emailresult) | No address, or `check: false`. |
| `results` | `ContactPoint[]` | Never null: one row per address sent, in order. |
| `results[].address` | `string` | Never null. |
| `results[].result` | [`EmailResult`](/code/data/types#emailresult) | Never null: `unknown` when the mail server did not answer. |
| `results[].catchAll` | `boolean \| null` | The server did not say whether it accepts every address. |
| `results[].role` | `boolean \| null` | Unknown. `true` is a shared inbox such as leasing@. |
| `results[].disposable` | `boolean \| null` | Unknown. |
| `results[].freeMail` | `boolean \| null` | Unknown. `true` is a personal mailbox provider, not a company domain. |
| `results[].suggestion` | `string \| null` | No likely typo: `gmail.com` is suggested for `gmial.com`. |
| `results[]` | [`Observed`](/code/data/types#observed) | Each row also carries `observedAt` and `method`. |
| `number` | `string \| null`, in E.164 | No route found a number under `maxCost`: a miss, and free. |
| `lineType` | `'mobile' \| 'landline' \| 'voip' \| null` | Unknown, or `checkLine: false`. |
| `country` | `string \| null`, in ISO 3166-1 | Unknown. |
| `contact` | `Contact` | Never null: the Contact the values were written onto. |
| `filled` | `string[]` | Never null: the fields this call filled; empty when no source knew the person, at $0. |
| `values` | `Record<string, { value: string \| number \| null; observedAt: string; method: Observed['method'] }>` | Never null: one entry per filled field, each with when and how it was read. |
| `values.organization.value` | [`Hostname`](/code/data/types#hostname) | No current employer on record. |
| `values.seniority.value` | `'owner' \| 'c-level' \| 'vp' \| 'director' \| 'manager' \| 'individual'` | Unknown. |

## Object
```json
{
  "name": "Dana Whitfield",
  "title": "Director of Property Management",
  "organization": "harborview-pm.com",
  "location": "Seattle, WA"
}
```

## Lifecycle
| State | Entered by |
| --- | --- |
| Found: listed with a name, title and company, no address yet | `Prospect.found` |
| Verified: a work email found and checked, written onto the Prospect | `Prospect.verified` |
| Enrolled: in a Sequence, with a send scheduled | `Contact.enrolled` |
| Engaged: replied, booked or clicked, so no longer a Prospect but a Contact | `Prospect.engaged` |
| Suppressed: opted out or bounced; every startup honors it forever | `Contact.suppressed` |

## Verbs
| Verb | The question it answers | Price | Success rate |
| --- | --- | --- | --- |
| [`Prospect.count`](/code/data/people/count) | How many people hold the role I sell to? | Free | 100% of 2,861,763 calls |
| [`Prospect.find`](/code/data/people/find) | Who at these companies do I talk to? | 3.8¢ per 100 rows | 99.99% of 636,024 calls |
| [`Prospect.verify`](/code/data/people/verify) | Can I reach this person, and is the address safe to send to? | 0.6¢ a verified address | 94.9% across its steps |
| [`ContactPoint.findEmail`](/code/data/people/find-email) | What is this person’s work email? | 0.45¢ an address found | 95% of 3,296,127 calls |
| [`ContactPoint.verifyEmail`](/code/data/people/verify-email) | Is this address real, and is it safe to send to? | 18¢ per 100 addresses | 99.99% of 2,098,997 calls |
| [`ContactPoint.findPhone`](/code/data/people/find-phone) | What is this person’s direct phone number? | 1.7¢ a number found | 92.9% of 1,002,342 calls |
| [`Contact.enrich`](/code/data/people/enrich) | Who is this person now: title, employer, seniority and where they are? | 20¢ per 100 contacts | 99.99% of 136,987 calls |

## The order you call them in
1. [`Prospect.count`](/code/data/people/count): How many people hold the role I sell to?
2. [`Prospect.find`](/code/data/people/find): Who at these companies do I talk to?
3. [`Prospect.verify`](/code/data/people/verify): Can I reach this person, and is the address safe to send to?
4. [`ContactPoint.verifyEmail`](/code/data/people/verify-email): Is this address real, and is it safe to send to?
5. [`Contact.enrich`](/code/data/people/enrich): Who is this person now: title, employer, seniority and where they are?

## Monitors on this Noun
| Verb | What it watches |
| --- | --- |
| [`Contact.enrich`](/code/data/people/enrich) | A saved Contact changes jobs: stop the Sequence at the old address and write to them at the new company. |
| [`Prospect.find`](/code/data/people/find) | New people who commented on a post about your problem this week. |

## Works with
- **Workflows:** [Build a verified list](/capabilities/find-customers/build-a-verified-list) · [Pick who to sell to first](/capabilities/find-customers/pick-who-to-sell-to) · [Post-engager harvest](/capabilities/find-customers/post-engagers) · [List refresh](/capabilities/find-customers/list-refresh) · [Champion moved](/capabilities/keep-and-grow/champion-moved) · [Inbound routing](/capabilities/convert-visitors/inbound-routing)
- **Agent tasks:** [Link pitches](/capabilities/earn-first-links/link-pitches) · [Account brief](/capabilities/reach-out/account-brief) · [Answer every inbound](/capabilities/convert-visitors/answer-every-inbound)
- **Services:** [Verified list with a bounce warranty](/capabilities/find-customers/verified-list)