Connect what you have. Same customer, one record.
Read-only. What is open today is marked; the rest says Coming soon.
Six systems, one vocabulary
When two arrivals are one record
Gmail
M.Rivas@example.com
email:m.rivas@example.com
HubSpot
m.rivas@example.com · +57 300 ··· 2233
email:m.rivas@example.com
1 record
1 record · same key
A phone, then an email, then the system's id. Never a guess.
What connects today
Each one read-only. Anything OnDuty does back is an action, and an action goes through the gate.
33 shown
- Available
HubSpot
Availablecontacts, companies, deals
Details
People and companies reconciled; deals sit under their company. No email, left out.
- Keyed on
- Customer
email:<address> - Company
domain:<domain> · company:<name> - Opportunity
hubspot.deal:<id>
- Customer
- Scopes it asks for
- crm.objects.contacts.read
- crm.objects.companies.read
- crm.objects.deals.read
Signs in through hubspot
- Coming soon
Salesforce
Coming soonaccounts, contacts, leads, opportunities
Details
The same reconciliation as HubSpot, against another system of record.
- Keyed on
- Customer
resolve: phone:… · email:… · salesforce.record:<id> - Company
domain:<domain> · salesforce.account:<id> - Opportunity
salesforce.opportunity:<id>
- Customer
- Scopes it asks for
- api
- refresh_token
Signs in through salesforce
- Coming soon
Outlook Contacts
Coming soonthe contacts folder, read as customers
Details
A contact with a phone or an email becomes a customer; the rest are counted.
- Keyed on
- Customer
resolve: phone:… · email:… · outlook_contacts.record:<id> - Company
company:<name>
- Customer
- Scopes it asks for
- Contacts.Read
Signs in through microsoft
- Needs setup
Gmail
Needs setupthreads, people, message text
Details
Conversations as entities, with message and attachment text to quote from.
- Keyed on
- Person
email:<address> - Conversation
gmail.thread:<id>
- Person
- Scopes it asks for
- gmail.readonly
Signs in through google
- Coming soon
Outlook Mail
Coming soonconversations, people, message text
Details
Gmail's treatment on Microsoft 365. Attachments are listed, not read.
- Keyed on
- Person
email:<address> - Conversation
outlook_mail.conversation:<id>
- Person
- Scopes it asks for
- Mail.Read
Signs in through microsoft
- Needs setup
Google Calendar
Needs setupevents and attendees
Details
Who met whom and when. A CRM almost never has it.
- Keyed on
- Person
email:<address> - Meeting
google_calendar.event:<id>
- Person
- Scopes it asks for
- calendar.readonly
Signs in through google
- Coming soon
Outlook Calendar
Coming soonevents and attendees
Details
Who met whom and when, from Outlook. Rooms and equipment left out.
- Keyed on
- Person
email:<address> - Meeting
outlook_calendar.event:<id>
- Person
- Scopes it asks for
- Calendars.Read
Signs in through microsoft
- Needs setup
Google Drive
Needs setupfiles, text, owners
Details
Files linked to their owners, with the text of Docs, Sheets, PDFs and Word. Images, video and files over 10 MB are left out.
- Keyed on
- Person
email:<address> - File
google_drive.file:<id>
- Person
- Scopes it asks for
- drive.readonly
Signs in through google
- Coming soon
OneDrive and SharePoint
Coming soonfiles, text, who may open them
Details
OneDrive and SharePoint files, readable by whoever Microsoft says can open them.
- Keyed on
- Person
email:<address> - File
onedrive.file:<id>
- Person
- Scopes it asks for
- Files.Read.All
Signs in through microsoft
- Needs setup
Telegram groups
Needs setupthe groups your bot is in
Details
From the moment your bot joined. A bot cannot read history.
- Keyed on
- Conversation
telegram.conversation:<bot>:<chat>
- Conversation
- Scopes it asks for
- None: no provider is asked for a grant
- Still owed
- Built, not yet exercised against Telegram groups.
- Coming soon
Slack
Coming soonthe channels and messages you choose
Details
Readable in OnDuty by exactly the people who can read it in Slack.
- Keyed on
- Person
email:<address> - Conversation
slack.conversation:<team>:<channel>
- Person
- Scopes it asks for
- channels:read
- groups:read
- im:read
- mpim:read
- channels:history
- groups:history
- im:history
- mpim:history
- users:read
- users:read.email
- files:read
- team:read
Signs in through slack
- Coming soon
Microsoft Teams
Coming soonteams, channels, chats, channel files
Details
Delegated permissions only: OnDuty reads what the connecting person can read.
- Keyed on
- Person
email:<address> - Conversation
teams.conversation:<tenant>:<id>
- Person
- Scopes it asks for
- Team.ReadBasic.All
- Channel.ReadBasic.All
- ChannelMessage.Read.All
- TeamMember.Read.All
- ChannelMember.Read.All
- Chat.Read
- ChatMember.Read
- Files.Read.All
Signs in through microsoft
- Needs setup
Facebook Pages
Needs setupposts, comments, reviews
Details
What the business posts and who answers in public. Commenters stay apart from customers.
- Keyed on
- Page
meta.page:<id> - Commenter
meta.user:<id>
- Page
- Scopes it asks for
- pages_show_list
- pages_read_engagement
- pages_read_user_content
Signs in through meta
- Still owed
- Meta's App Review per permission; until then, the app's own admins only.
- Needs setup
Instagram
Needs setupmedia, likes, comments
Details
Recent posts with counts, and the people who comment. Replying is not asked for.
- Keyed on
- Account
meta.instagram:<id> - Commenter
meta.instagram_user:<id>
- Account
- Scopes it asks for
- instagram_basic
- pages_show_list
Signs in through meta
- Still owed
- Meta's App Review, as for Facebook Pages.
- Needs setup
Google Business Profile
Needs setuplocations, reviews, replies, rating, performance
Details
One or two stars with words is a complaint. OnDuty only reads, though Google offers read-write.
- Keyed on
- Location
google_business_profile.location:<name> - Reviewer
google_business_profile.reviewer:<review>
- Location
- Scopes it asks for
- business.manage
Signs in through google
- Still owed
- Google must grant the project Business Profile API access; the quota is zero until then.
- Needs setup
Google Analytics
Needs setupproperties, daily traffic by channel
Details
Sessions, users, key events and revenue by channel, source, campaign and page.
- Keyed on
- Analytics property
google_analytics.property:<id>
- Analytics property
- Scopes it asks for
- analytics.readonly
Signs in through google
- Needs setup
Google Search Console
Needs setupsites, clicks, impressions, position
Details
How the business shows in Google Search each day. A three-place drop is a signal.
- Keyed on
- Search Console site
search_console.site:<site>
- Search Console site
- Scopes it asks for
- webmasters.readonly
Signs in through google
- Needs setup
YouTube
Needs setupchannel, videos, daily views
Details
The channel, recent videos as documents, and daily views, watch time and subscribers.
- Keyed on
- Channel
youtube.channel:<id> - Video
youtube.video:<id>
- Channel
- Scopes it asks for
- youtube.readonly
- yt-analytics.readonly
Signs in through google
- Needs setup
Facebook and Instagram insights
Needs setupPage and Instagram reach, engagement
Details
Daily views, reach, engagement and follows, on the same nodes as Pages and Instagram.
- Keyed on
- Page
meta.page:<id> - Account
meta.instagram:<id>
- Page
- Scopes it asks for
- pages_show_list
- pages_read_engagement
- read_insights
- instagram_basic
- instagram_manage_insights
Signs in through meta
- Still owed
- Built, switched off: Meta's App Review for the insights permissions.
- Needs setup
Meta Lead Ads
Needs setuplead-form fills, filed under known customers
Details
A lead lands on the customer the CRM or WhatsApp already knows.
- Keyed on
- Lead
resolve: phone:… · email:… · meta_lead.record:<id>
- Lead
- Scopes it asks for
- leads_retrieval
- pages_show_list
- pages_read_engagement
- pages_manage_ads
- ads_management
Signs in through meta
- Still owed
- Built, switched off: Meta's App Review for leads_retrieval and its Page and ads permissions.
- Needs setup
Meta Ads
Needs setupcampaigns, ad sets, ads, spend, results
Details
Spend, reach, clicks, leads and purchases per closed day. A 40 percent spend rise on the prior week is a signal.
- Keyed on
- Campaign
meta.campaign:<id> - Ad set
meta.adset:<id>
- Campaign
- Scopes it asks for
- ads_read
Signs in through meta
- Still owed
- Meta's App Review, and full-access Marketing API for accounts beyond the owner's.
- Coming soon
Google Ads
Coming sooncampaigns, ad groups, keywords, spend
Details
Spend, clicks and conversions per closed day. Signals state only what the data states.
- Keyed on
- Account
google_ads.customer:<id> - Campaign
google_ads.campaign:<id> - Ad group
google_ads.ad_group:<id>
- Account
- Scopes it asks for
- adwords
Signs in through google
- Coming soon
QuickBooks
Coming sooncustomers, invoices, payments
Details
Who owes what since when, reconciled with the CRM and the inbox.
- Keyed on
- Customer
resolve: phone:… · email:… · quickbooks.record:<id> - Company
company:<name> - Invoice
quickbooks.invoice:<id>
- Customer
- Scopes it asks for
- com.intuit.quickbooks.accounting
Signs in through intuit
- Available
Postgres
Availableone SELECT, read-only transaction
Details
Tables read with a timeout and a row budget. MySQL and SQL Server are not built.
- Keyed on
- Record
resolve: phone:… · email:… · <system>.record:<id>
- Record
- Scopes it asks for
- None: no provider is asked for a grant
- Available
Push records
Availableyour system posts entities and signals
Details
A token for one source opens one route. Not a developer API.
- Keyed on
- Record
resolve: phone:… · email:… · <system>.record:<id>
- Record
- Scopes it asks for
- None: no provider is asked for a grant
- Available
Read an API
Availableany https JSON API, on a schedule
Details
Base URL, auth header, paging and field mapping. Private addresses are refused.
- Keyed on
- Record
resolve: phone:… · email:… · <system>.record:<id>
- Record
- Scopes it asks for
- None: no provider is asked for a grant
- Available
A CSV file
Availablea CSV export, mapped to entities
Details
The export every system can produce. Mapped columns become entities and memories.
- Keyed on
- Record
resolve: phone:… · email:… · <system>.record:<id>
- Record
- Scopes it asks for
- None: no provider is asked for a grant
- Available
Workspace chat
Availableyour members, at your own address
Details
The workspace's own chat, members only, on every plan. With no agent bound, the Brain answers.
- Keyed on
- Customer
onduty.customer:<row>
- Customer
- Scopes it asks for
- None: no provider is asked for a grant
- Available
Telegram
Availableyour own bot, reads and replies
Details
A bot your workspace makes with BotFather. Every reply is evaluated before it is sent.
- Keyed on
- Customer
onduty.customer:<row>
- Customer
- Scopes it asks for
- None: no provider is asked for a grant
- Needs setup
WhatsApp
Needs setupyour business number, reads and replies
Details
Conversations on the number you already publish. A reply is an action, evaluated first.
- Keyed on
- Customer
phone:<number>
- Customer
- Scopes it asks for
- whatsapp_business_management
- whatsapp_business_messaging
Signs in through meta
- Still owed
- Built, not yet exercised against Meta; its messaging review is not submitted. We set it up with you.
- Coming soon
Slack
Coming soonmentions and direct messages, as the member
Details
Answers where you turn it on. Every reply is evaluated before it is sent.
- Keyed on
- Customer
onduty.customer:<row>
- Customer
- Scopes it asks for
- app_mentions:read
- chat:write
Signs in through slack
- Coming soon
Microsoft Teams
Coming soona bot in Teams, as the member
Details
Answers messages and mentions in channels you turn on. Every reply is evaluated first.
- Keyed on
- Customer
onduty.customer:<row>
- Customer
- Scopes it asks for
- None: no provider is asked for a grant
- Available
Your own endpoint
Availablewrites: only the actions you declare
Details
Your endpoint. The gate evaluates; only a clean permit calls it. Premium and up.
- Keyed on
- Writes nothing into the Brain
- Scopes it asks for
- None: no provider is asked for a grant
Any assistant that speaks MCP reads with a key you issue and can never accept, execute or send. Signing in from Claude or ChatGPT is built, not yet exercised live. The public agent chat is not a connector either.
Missing a system? Tell us. A new connector is work, not a switch.
How a sync behaves
| Situation | What happens | Why |
|---|---|---|
| The run reaches its record budget | Saves its position and continues. | Nothing times out at ninety percent. |
| A run fails | Saves its cursor too. | Recovery never rereads what worked. |
| A grant is revoked | Stops, and says so. | Retrying cannot fix a revoked grant. |
| A rate limit or a blip | Backs off and retries. | A blip is not a revocation. |
Two records about every source
| Record | What it holds | On disconnect |
|---|---|---|
| The live plumbing | Credential, cursor, schedule. | Deleted at once. |
| Where knowledge came from | Which source produced each memory and insight. | Survives, marked no longer connected. |