Waitlists
Launch with a list.
A waitlist for every app, with as many lists as you need, signups per day and who you have invited.

Lists, not spreadsheets.
Name a list in the form, such as beta or android, and it exists. Move people from waiting to invited to joined, remove them, or export the list.

Fair to the people who sign up.
Asking for consent records which text they agreed to. A repeat signup gets the same answer, so your form never tells anyone who is on the list.
- Email addresses encrypted at rest
- Changing a status sends no email
- Find or erase one address from Privacy
A signup with consent and your own context
await logsure.waitlist({
email: '[email protected]',
name: 'Ann',
list: 'beta',
consent: true,
props: { plan: 'team', referrer: 'launch-post' },
});Bring the list you have.
Import earlier signups with their own dates and statuses, up to 1,000 per call, with the app's server key.
POST /_care/import/waitlist
{
"app": "trailmap",
"entries": [
{ "email": "[email protected]", "list": "beta",
"status": "invited", "created_at": "2026-08-14T09:30:00Z" }
]
}How it works.
Add the script
Or post JSON to /_care/waitlist yourself.
<script defer data-app="trailmap"
src="/_care/script.js"></script>Keep the bots out
An empty honeypot field, and Turnstile if you want it.
<input name="website" tabindex="-1"
autocomplete="off" hidden>Invite and export
Statuses in the console, the apps or the terminal; CSV whenever you need it.
logsure waitlist --list beta --status waitingRead the waitlist docs.Waitlist signupsThe API