Inbox-driven auto-update: contacts that add themselves
BusinessOn Business and Team plans, RadiusOS reads your inbound Gmail nightly, identifies unknown senders that look like real correspondents, extracts their contact info from the email signature, and creates the contact for you. You stop being a data-entry clerk for your own software.
What it does
Most CRMs are hungry mouths. You feed them. RadiusOS flips that on Business and Team: a nightly cron sweeps the workspace owner's inbox, finds senders who aren't already in your contacts, runs Claude Haiku on the most recent message body to pull the signature fields (name, title, company, phone), and creates the contact at confidence ≥ 0.7. Existing contacts whose signature reveals new info get those fields auto-updated.
The cron runs at 06:30 UTC daily for every Business+ workspace with Gmail connected. The Discover from Gmail button on your dashboard and contacts list runs the same logic on demand with a 14-day lookback (default).
What gets auto-created
A sender becomes a contact when ALL of these are true:
- They've sent at least 2 messages to you in the lookback window (filters out one-off newsletter blasts)
- They aren't already in your contacts (matched by email)
- Their email isn't in our personal-domain skip list (gmail.com, outlook.com, etc.). These still create the contact, but with the company field left blank unless the signature explicitly states one
- Claude's confidence score on the signature extraction is at least 0.7
- They aren't on the founder test-account skip list
Auto-discovered contacts get a ✨ marker next to their name on the contact detail page so you always know which fields came from the inbox vs. values you typed yourself. Tap the marker for the extraction date.
Privacy and Limited Use
Per Google's Gmail Limited Use rules, here's exactly what we do and don't do with your inbound mail:
- We process raw email bodies in memory ONLY. We send the most recent message from each unknown sender to Anthropic to run the signature extraction, and we throw the body away as soon as we get the structured fields back.
- We never persist raw email bodies to RadiusOS storage as part of this feature. The Activity feed entry created when a contact is auto-discovered says "Auto-created from inbox sweep" and contains no body content.
- We store the originating Gmail message ID on the new Contact (Contact.inboxSourceMessageId) for traceability. That's a Gmail-side reference, not your message content.
- The ✨ marker on auto-derived fields is the in-product attribution surface required by Limited Use. You can always tell which fields came from the cron and which you entered by hand.
If you want to disable inbox auto-update for your workspace, disconnect Gmail in Settings. The cron skips workspaces without a Gmail connection.
Cost and limits
Each unique sender extraction costs about $0.0008 with Claude Haiku 4.5 + cached system prompt. The cron caps at 25 extractions per workspace per night to keep aggregate cost bounded; the manual button caps at 50 per click. Per-sender deduplication via InboxProcessedSender means the same sender doesn't get re-extracted within 30 days, even if they show up in your inbox again.
First-run note: when this feature first activates for your workspace, the manual button or first cron pass will sweep up to 14 days of inbox. Subsequent runs only see the new senders since the last sweep, so they cost less and run faster.
When a sender is skipped
Most skips are silent. If you're curious about what got filtered, the InboxDiscoveryRun telemetry surfaces six skip reasons:
| Reason | What it means |
|---|---|
| test_user_alias | Sender matches the founder's test alias pattern (excluded from production discovery) |
| existing_contact | Sender is already in your contacts (we route to the auto-update path instead, not skip) |
| dedup_recent | We've already inspected this sender within the last 30 days |
| blast_pattern | Only 1 message from this sender in the lookback (looks like a newsletter or transactional alert, not a real correspondent) |
| low_confidence | Claude's signature extraction came back below 0.7 confidence (usually a no-reply sender, an auto-reply, or a templated marketing email) |
| no_body | We couldn't fetch a usable text body from the message (rare; typically a malformed MIME structure) |