What a contact list is here
A contact list is the big caller-ID database: hundreds of thousands of records, keyed by DMR ID, that let your radio show an incoming call as a callsign and a name instead of a bare number. It is the thing that turns a screenful of digits into people you recognise.
It is not your Talk Groups table, and mixing the two up is far and away the most common misunderstanding about any of this. Talk Groups is a few hundred rows inside the codeplug — the table your channels point at by name, and what the radio transmits to. The caller-ID database is pointed at by nothing at all: no channel references it, no zone contains it, and the radio reads it only to put a name on the display. So a new list adds no talkgroups and changes no channel, and no amount of editing Talk Groups will ever make incoming callers show names.
Two things use a list, and both take it from your account rather than from a project: a project's Digital Contacts tab, which puts it inside the codeplug you build or download, and the AesApp Radio Updater desktop app, which this page hands a list to and which writes it straight to a radio over USB without touching the codeplug at all. Upload once and both can use it.
Where to get one
AesApp WebCPS does not host a contact list and does not fetch one on your behalf. You bring the file.
Five places publish one, and the page itself carries these links:
- aes.app — our own builder. Download the free dump files from RadioID.net or DMRID Atlas yourself, pick an AnyTone model and a region, and your browser turns them into the CSV; nothing is uploaded there.
- radioid.net — the RadioID data generator, by the register itself.
- kf5iw.com — by KF5IW.
- iz8wnh.it — by IZ8WNH.
- dmrcontacts.com — by CX8BIT.
Four of those are other people's work, offered as a starting point rather than endorsed. Each has its own terms of use, which is what the confirmation on the upload is about. A CSV you exported from AesApp WebCPS earlier, or one the factory CPS wrote, works just as well.
Which list fits your radio
A radio holds a fixed number of contacts, and a worldwide list is bigger than most models will take:
- AT-D878UVII, every AT-D578 (Plus or not), AT-D168UV and AT-D890UV hold 500,000. A worldwide list — around 308,000 records at the time of writing — fits comfortably. The AT-D890UV also has room for 80,000 NXDN contacts in a store of its own, so a full DMR list costs it none of them.
- A first-generation AT-D878UV holds 200,000. A worldwide list does not fit, and the desktop app simply leaves an over-large list out of its picker rather than letting you pick it and fail later.
Most sources let you cut the list down by country or region before you download it, which is the easy way to stay under a ceiling. The record count is shown against every list you have saved, so you can check after the fact too.
What the file has to be
A DigitalContactList.CSV or DMRDigitalContactList.CSV — the same columns under two names, one per radio family. Nothing is filtered or joined; your file is stored as it arrives.
An NXDN half can come the same way, as an NXDigitalContactList.CSV or as a raw NXDN register export. The two differ by three columns the radio wants and the register does not carry, and those are added for you, so either will do. Only the AT-D890UV has an NXDN database at all.
A file that is not a contact list is refused rather than stored, and the check is not a guess at the filename: the header has to be right, and every row has to be one a radio could actually take. A refused header is quoted back beside the one that was expected, so you can see the difference rather than guess at it.
The upload is compressed in your browser and checked on arrival, so a transfer that is cut short is refused rather than quietly stored as a list missing its tail. It then stays compressed on the server — a worldwide list is 56 MB of contact data kept as 24 — which is why three lists per account is a real limit rather than an arbitrary number.
What you confirm when you upload
Every upload — first time or replacement — asks you to confirm one thing: that you have the right to use the file, and that you will comply with the terms of wherever it came from. Which terms those are is for you to know, because this application never sees where your file came from; a CSV can come from any of the sources above, from an AesApp WebCPS export, or from anywhere else you are entitled to take one.
The confirmation is required rather than assumed: without it the save is refused. It is recorded with the list and the moment you gave it, and a replacement asks again because it is a new file.
Rename, replace, delete
Rename changes only the name. The name is the whole of what you pick by — in the project tab's dropdown and in the desktop app's list picker — so a bad one can be fixed without uploading anything again. Projects using the list are unaffected.
Replace is how you take a fresher list. Upload the new file under the same name and the list is swapped in place: same entry, same name, new contacts. Every project pointing at it picks the new data up on its next build or download, and it does not count as a second list.
Delete removes the list and its files. A project still pointing at a deleted list does not fail — it falls back to the contacts its codeplug was imported with, and tells you so as a warning when you build or write. That is deliberate: a missing list must never quietly become an empty one.
Three lists per account. They are large, and the thinking behind the limit is that one list per radio you own is normally plenty. Replacing is free; it is only a fourth name that is refused.
A list is a snapshot, and nothing refreshes it
The register behind these lists moves daily; your copy does not. It holds exactly what your file held on the day you uploaded it, and no scheduled job here will update it — doing that would mean holding the register on your behalf, which is the thing this whole arrangement exists to avoid. The date each list was uploaded is shown beside it. Replacing it is a two-minute job, and once or twice a year is plenty for most people.