# Missing and empty profile fields

> Tell an unknown value from a real zero, an empty list or data that Reverse Contact does not collect.

A blank field does not automatically mean zero. It can mean the result did not include that field, the source supplied no usable value, the returned collection is empty, or Reverse Contact does not collect that kind of data at all.

Keep these cases separate in Ask answers, Lists, exports and your own systems. Reverse Contact never turns an unknown value into a fact.

## Check the result shape first

Different lookups return different sets of fields. A light person result contains identity and current-role information. Photos, connection counts and work history belong to a full person profile, so those keys can be absent from a light result.

[Enrich profile](https://docs.reversecontact.com/endpoints/enrich-person) returns the full profile by default. Check `data.isFullProfile` before reading those fields: when it is `false`, only the light shape could be returned, and the [Profile](https://docs.reversecontact.com/endpoints/fetch-profile) endpoint returns the full profile from the returned `id` or `linkedinUrl`. A missing key in the light shape says nothing about the person's source profile.

## Read each empty-looking value correctly

| What you receive | What you know | What you must not assume |
| ---------------- | ------------- | ------------------------ |
| A field is outside the result shape | This lookup did not return that field | The value is empty or zero |
| `null` | No usable value was returned for this collected field | The exact reason, or that the value is `0` |
| `[]` | The returned collection contains no entries | That entries exist elsewhere, or why none were returned |
| `0` | The returned numeric value is zero | That another `null` or blank field also means zero |
| No field exists for that kind of data | Reverse Contact does not collect it in profile enrichment | That a later refresh will add it |

A `null` value carries no per-field reason code. The source may not provide the value, but the response does not prove whether it was omitted, unavailable at collection time or unusable for another reason. Preserve `null` as unknown unless another field or error explicitly explains it.

Use a field's documented contract when it gives `null` a specific meaning. For example, `end: null` in an employment date range means that the position is current. Do not extend that meaning to unrelated fields.

## Common fields

### Connection count

`connectionsCount` is a number or `null` on a full person profile. Preserve a returned `0` as zero and preserve `null` as unknown. Never store, display or average `null` as `0`.

The field is not part of a light person result. If Ask or a List has only the light shape, request the full profile before deciding that the count is unknown.

### Profile photo

`photoUrl` is a URL or `null` on a full person profile. A blank avatar can therefore mean that the full profile was not delivered or that the full result returned `null`. Neither case explains why a photo URL was unavailable.

### Work history

`experience` is a list on a full person profile. An empty list means that the returned work-history collection has no entries. It does not identify a collection failure or prove a specific reason.

Fields inside an employment entry can be independently `null`, including the description, contract type, company identifiers, location and dates. Keep the available parts of the entry instead of discarding the whole position. See [Current position and work history ordering](https://docs.reversecontact.com/guides/current-position-resolution) for ordering rules.

### Optional company fields

Company fields such as `websiteUrl`, `industry`, `description`, `tagline`, `logoUrl`, `headquarter`, `foundedOn`, `phone`, `followersCount` and `employeesCount` can be `null`. Treat each one as unknown without guessing a cause.

An exact `employeesCount` can be `null` while `employeeCountRange` is present. Keep the range as a range; do not invent an exact employee count from it. Lists such as company locations can be empty even when other company fields are present.

## Data that profile enrichment does not collect

Profile enrichment does not collect posts or publications, comments, reactions or other interactions. Those fields are not temporarily blank and a refresh will not add them. Activities were deliberately retired without a replacement so the product can focus on professional identity and company data.

Email addresses and phone numbers also use dedicated lookups rather than profile fields. A "not found" result from one of those lookups is different from a profile field returning `null`.

## Decide whether to refresh

An empty-looking value belongs to the version of the profile that was returned. Check the record's age before spending credits on a live refresh. A refresh collects again, but it does not guarantee that an unknown field will become available.

Use [Data freshness](https://docs.reversecontact.com/guides/data-freshness) to choose between Check, cached Fetch and Live. Review [Rate limits and credits](https://docs.reversecontact.com/guides/rate-limits-credits) before a paid lookup.

## Handle the result in Ask and Lists

- **In Ask:** ask for a full profile when you need photos, connection counts or work history. Ask can explain a returned value, but it must not invent the reason for `null`.
- **In Lists:** keep blank cells as unknown. Enrich the relevant data family when the field has not been collected for that row, and review the quote before confirming.
- **In exports and integrations:** preserve `null`, empty lists and zero as different values. Do not replace all three with an empty string or zero.
- **For failures:** distinguish a successful profile with missing fields from a request or lookup error. See [Error handling and retries](https://docs.reversecontact.com/guides/errors-retries).

For shorter answers about empty fields, privacy and common errors, see the [Product FAQ](https://app.reversecontact.com/docs/product/faq).
