# Agify

> Estimate how old someone is likely to be from their name, using Agify's dataset of real-world name records. Enrich one contact or a whole list in a single step, and scope an estimate to a country when you know one, since the same name skews older in some places than others. Every answer says how many records it rests on and says plainly when there were none, so a workflow can tell a well-evidenced estimate from a guess. The free plan covers 2,500 names a month.

App · Contact Management · 3 actions. Web page: https://docs.lodol.com/docs/integrations/agify

## Actions

### Check remaining lookups

Check how many name lookups are left on this Agify plan before they start failing, and when the allowance resets. Put it in front of a large enrichment run to hold the run back rather than watch it fail halfway. Running out is reported as an answer, not an error, so a workflow can branch on it. Checking spends one lookup, because Agify only reports the allowance alongside a real answer.

**Inputs**: None.

**Outputs**

- `quota` (object): What is left of this Agify plan's name allowance, as of this request. Nothing when Agify did not report it.

**Example output**

```json
{
  "quota": {
    "allowed": 2500,
    "exhausted": false,
    "remaining": 2417,
    "resets_at": "2026-09-19T09:00:00+00:00",
    "resets_in_seconds": 1382400,
    "summary": "2,417 of 2,500 name lookups left; the allowance resets in 16 days.",
    "used": 83
  }
}
```

### Estimate age from a name

Estimate how old someone is from their name. Send the fullest name you have - Agify reads the given name out of a full name itself, handles titles, initials and nicknames, and does not care what order the parts are in. Scope it to a country when you know one, since the same name skews older in some places than others. Every answer says how many records it rests on, and says plainly when there were none.

**Inputs**

- Name (`name`, text, required): The person's name. A full name gives the best estimate; a first name on its own works too.
- Country (`country`, text): Optional. Estimate from one country's records instead of Agify's worldwide data. The same name can skew a decade older in one country than another, so pick the country if you know it. How much data Agify holds varies a lot by country - the records count on each result says how much was behind it. One of: `AF` (Afghanistan), `AX` (Åland Islands), `AL` (Albania), `DZ` (Algeria), `AS` (American Samoa), `AD` (Andorra), `AO` (Angola), `AI` (Anguilla), `AQ` (Antarctica), `AG` (Antigua and Barbuda), and 239 more.

**Outputs**

- `age` (number): The estimated age in years, or nothing when Agify has no records for this name. Check 'has_estimate' rather than testing the age.
- `country` (text): The two-letter country code the estimate was scoped to, or nothing when it used Agify's worldwide data.
- `country_name` (text): That country's name, for putting in a message.
- `has_estimate` (true/false): Whether Agify could estimate an age at all. False for a name it has never seen, or one it has no records for in the chosen country - the request still succeeded.
- `name` (text): The name exactly as it was sent, so a result can be matched back to the row it came from.
- `quota` (object): What is left of this Agify plan's name allowance, as of this request. Nothing when Agify did not report it.
- `record_count` (number): How many real-world name records the estimate is based on. A large number means a well-evidenced estimate; a handful means a shaky one, and 0 means there was nothing to go on.
- `summary` (text): The result as a sentence, ready to put in a message. Says so plainly when Agify had no records to go on.

**Example output**

```json
{
  "age": 48,
  "country": "US",
  "country_name": "United States",
  "has_estimate": true,
  "name": "Sarah Johnson",
  "quota": {
    "allowed": 2500,
    "exhausted": false,
    "remaining": 2417,
    "resets_at": "2026-09-19T09:00:00+00:00",
    "resets_in_seconds": 1382400,
    "summary": "2,417 of 2,500 name lookups left; the allowance resets in 16 days.",
    "used": 83
  },
  "record_count": 32571,
  "summary": "Sarah Johnson is likely around 48 in the United States, from 32,571 records."
}
```

### Estimate ages for a list of names

Estimate an age for every name in a list, in one step - for enriching a set of contacts, a sign-up export or the results of an earlier step. The answers come back in the order the names went in, one for each, so they line up with the list they came from, and a summary gives the average, the youngest and the oldest without a second pass. Repeated names are only looked up once, because Agify charges by the name.

**Inputs**

- Names (`names`, list, required): The names to estimate, one per entry. Full names give the best estimates. Up to 1,000 at a time.
- Country (`country`, text): Optional. Estimate from one country's records instead of Agify's worldwide data. The same name can skew a decade older in one country than another, so pick the country if you know it. How much data Agify holds varies a lot by country - the records count on each result says how much was behind it. One of: `AF` (Afghanistan), `AX` (Åland Islands), `AL` (Albania), `DZ` (Algeria), `AS` (American Samoa), `AD` (Andorra), `AO` (Angola), `AI` (Anguilla), `AQ` (Antarctica), `AG` (Antigua and Barbuda), and 239 more.

**Outputs**

- `average_age` (number): The mean estimated age, over the names that got one. Nothing when none of them did.
- `count` (number): How many names were sent.
- `country` (text): The two-letter country code the estimate was scoped to, or nothing when it used Agify's worldwide data.
- `country_name` (text): That country's name, for putting in a message.
- `names_charged` (number): How many lookups this step actually spent - the number of distinct names, which is lower than the count whenever the list repeats one.
- `oldest` (object): The name and age at one end of the list.
- `quota` (object): What is left of this Agify plan's name allowance, as of this request. Nothing when Agify did not report it.
- `results` (list): One estimate per name sent, in the same order.
- `summary` (text): The result as a sentence, ready to put in a message. Says so plainly when Agify had no records to go on.
- `with_estimate` (number): How many of them Agify could put an age to.
- `without_estimate` (number): How many it had no records for. Those rows still appear in the results, with no age.
- `youngest` (object): The name and age at one end of the list.

**Example output**

```json
{
  "average_age": 44.5,
  "count": 2,
  "country": null,
  "country_name": null,
  "names_charged": 2,
  "oldest": {
    "age": 48,
    "name": "Sarah Johnson"
  },
  "quota": {
    "allowed": 2500,
    "exhausted": false,
    "remaining": 2417,
    "resets_at": "2026-09-19T09:00:00+00:00",
    "resets_in_seconds": 1382400,
    "summary": "2,417 of 2,500 name lookups left; the allowance resets in 16 days.",
    "used": 83
  },
  "results": [
    {
      "age": 48,
      "has_estimate": true,
      "name": "Sarah Johnson",
      "record_count": 32571
    },
    {
      "age": 41,
      "has_estimate": true,
      "name": "Michael Chen",
      "record_count": 8104
    }
  ],
  "summary": "Estimated ages for 2 of 2 names; average 44.5.",
  "with_estimate": 2,
  "without_estimate": 0,
  "youngest": {
    "age": 41,
    "name": "Michael Chen"
  }
}
```
