# How many addresses an app can complete each day

**About 75 addresses per day at 150 requests.** Measured 2026-10-03 with the element 1.0.0, for a person typing 40 words a minute and typing the whole address. A person who types slower sends more requests (the table).

The starting fair-use ceiling is 150 requests for each app, each product and each day. Every `suggest` request counts, and so does the `resolve` that fetches the chosen address, so one typed address uses several requests. The number depends on how fast the person types: the element waits 400 ms after the last key before it asks, so a person who pauses less than that between keys sends one `suggest` request for the whole burst, and a person who pauses longer sends one after almost every key. A verified owner can ask Comms.ID for a higher ceiling, and an app can make the element wait longer or shorter with its `debounce` attribute (the rows marked `debounce`).

| Element setting | What is typed | Typing speed | Requests for one completed address (mean) | Addresses per day at 150 requests |
| --- | --- | --- | --- | --- |
| Default | The whole address | 24 words a minute (500 ms a character) | 34 | 4 |
| Default | The whole address | 40 words a minute (300 ms a character) | 2 | 75 |
| Default | The whole address | 100 words a minute (120 ms a character) | 2 | 75 |
| Default | To the end of the suburb | 24 words a minute (500 ms a character) | 25.3 | 5 |
| Default | To the end of the suburb | 40 words a minute (300 ms a character) | 2 | 75 |
| Default | To the end of the suburb | 100 words a minute (120 ms a character) | 2 | 75 |
| `debounce="200"` | The whole address | 24 words a minute (500 ms a character) | 34 | 4 |
| `debounce="200"` | The whole address | 40 words a minute (300 ms a character) | 34 | 4 |
| `debounce="200"` | The whole address | 100 words a minute (120 ms a character) | 2 | 75 |
| `debounce="200"` | To the end of the suburb | 24 words a minute (500 ms a character) | 25.3 | 5 |
| `debounce="200"` | To the end of the suburb | 40 words a minute (300 ms a character) | 25.3 | 5 |
| `debounce="200"` | To the end of the suburb | 100 words a minute (120 ms a character) | 2 | 75 |
| `debounce="800"` | The whole address | 24 words a minute (500 ms a character) | 2 | 75 |
| `debounce="800"` | The whole address | 40 words a minute (300 ms a character) | 2 | 75 |
| `debounce="800"` | The whole address | 100 words a minute (120 ms a character) | 2 | 75 |
| `debounce="800"` | To the end of the suburb | 24 words a minute (500 ms a character) | 2 | 75 |
| `debounce="800"` | To the end of the suburb | 40 words a minute (300 ms a character) | 2 | 75 |
| `debounce="800"` | To the end of the suburb | 100 words a minute (120 ms a character) | 2 | 75 |

## How it was measured

- **The element:** the released `<comms-id-address>` 1.0.0 (sha384 `sha384-7FPIVEPB1mntl8BfVwEi2jaTssrOQ72fsxRcWUsDr1EZgSuLVvrN/o181vMBmxcV`), served as on cdn.comms.id, with its default settings (the rows marked `debounce` set that one attribute): it asks 400 ms after the last key, and only once at least 3 characters are typed.
- **The browser:** Chromium 149.0.7827.55, real, with each key pressed at a steady interval: 24 words a minute is 500 ms a character; 40 words a minute is 300 ms a character; 100 words a minute is 120 ms a character (a word is 5 characters).
- **The typing:** 10 real street addresses of public buildings, typed as free text, then the first suggestion chosen. Two rules: the whole address typed (number, street, suburb, state, postcode); and typed to the end of the suburb (number, street, suburb). Typing the whole address is the most requests one address can cost, so the published figure is for it.
- **The count:** every `suggest` and `resolve` request the browser sent for each completed address, whether or not its answer was still wanted. The server answered each request in 120 ms with the contract's own example reply.
- **The figure:** the mean number of requests for one address, and 150 divided by that mean, rounded down.
- **Not counted:** a site with no backend that uses a public key also exchanges its key for a short-lived capability, once for each of `suggest` and `resolve` about every two minutes, and each exchange takes one unit of the allowance; a site with its own server (a relay) makes none.
- **Before 1.0.0:** the element 0.1.3, the last 0.x release (sha384 `sha384-9vOlQgoIOHUXk+q2aHEgtgtS85+/J6fa44XYORDQCO2jtSrlQ+EYNLywAve3RZOT`), waited 200 ms by default. Measured the same way on 2026-10-03, it gave **about 4 addresses per day at 150 requests** for 40 words a minute and the whole address (34 requests for one address). The rows marked `debounce="200"` above are the 1.0.0 element set to that old wait, and they give the same counts. The 1.0.0 default is longer for this reason.

| 0.1.3, default wait of 200 ms: what is typed | Typing speed | Requests for one completed address (mean) | Addresses per day at 150 requests |
| --- | --- | --- | --- |
| The whole address | 24 words a minute | 34 | 4 |
| The whole address | 40 words a minute | 34 | 4 |
| The whole address | 100 words a minute | 2 | 75 |
| To the end of the suburb | 24 words a minute | 25.3 | 5 |
| To the end of the suburb | 40 words a minute | 25.3 | 5 |
| To the end of the suburb | 100 words a minute | 2 | 75 |

## The addresses at 40 words a minute, typed in full, with the 1.0.0 default

| Address typed | Characters | `suggest` | `resolve` | Requests |
| --- | --- | --- | --- | --- |
| 100 Harris Street Pyrmont NSW 2009 | 34 | 1 | 1 | 2 |
| 483 George Street Sydney NSW 2000 | 33 | 1 | 1 | 2 |
| 328 Swanston Street Melbourne VIC 3000 | 38 | 1 | 1 | 2 |
| 64 Adelaide Street Brisbane City QLD 4000 | 41 | 1 | 1 | 2 |
| 601 Hay Street Perth WA 6000 | 28 | 1 | 1 | 2 |
| 128 King William Street Adelaide SA 5000 | 40 | 1 | 1 | 2 |
| 50 Macquarie Street Hobart TAS 7000 | 35 | 1 | 1 | 2 |
| 14 Harry Chan Avenue Darwin City NT 0800 | 40 | 1 | 1 | 2 |
| 148 Bunda Street Canberra ACT 2601 | 34 | 1 | 1 | 2 |
| 1 Martin Place Sydney NSW 2000 | 30 | 1 | 1 | 2 |

The measurement is repeatable: `pnpm --filter @comms-id/address-element measure` types the same addresses again and writes this page, and the test `packages/address-element/tests/ceiling.test.ts` checks the counts against `packages/address-element/measurements/daily-ceiling.json` (the 1.0.0 measurement) and `daily-ceiling-0.1.3.json` (kept as it was written).
