Leo LogoHelloLeo
IntegrationsTemplatesPricingCommunity
Book a demoSign InGet Started
Leo LogoHelloLeo

The AI developer that builds the apps your ERP doesn't have — internal tools, portals and dashboards, running in production on top of NetSuite, Odoo, Salesforce and more.

Applications

  • HelloLeo for NetSuite
  • HelloLeo for Odoo
  • HR & Employees
  • Inventory
  • Accounting & Procurement

Integrations

  • Shopify integration
  • HubSpot integration
  • WhatsApp Business integration
  • Salesforce integration
  • Stripe integration
  • Google Sheets integration
  • Outlook integration
  • QuickBooks integration
  • All integrations

Product

  • Pricing
  • Templates
  • vs AI coding tools

Company

  • Contact

Resources

  • Documentation
  • Help Center
  • Community

Legal

  • Trust Center
  • Security
  • Status
  • Privacy Policy
  • Terms of Service
  • DPA
Microsoft Outlook Email logo
Integration

Connect Microsoft Outlook Email to your ERP

Microsoft Outlook lets you bring all your email accounts and calendars in one convenient spot.

Communication
Browse all integrations

What Leo can do with Microsoft Outlook Email

26 actions Leo can use in the apps and agents it builds for you: 15 that read Microsoft Outlook Email data, 11 that create or update it.

reads data writes data deletes data

Read from Microsoft Outlook Email · 15

  • Find Email

    Find (search, list, or count) email messages in a Microsoft Outlook mailbox via Microsoft Graph. By default a search or list request (countOnly = false) scans the WHOLE mailbox (all folders including Sent, Archive, etc.), matching what you see when searching in Outlook; a count-only request (countOnly = true) with no explicit folderScope stays inbox-scoped and counts ALL inbox messages by default, not just unread ones — also set isRead to false to count only unread messages (matching Outlook's unread inbox badge). Set folderScope explicitly to override this behavior for either mode. To search a shared mailbox, set userId (the mailbox owner's UPN or ID); add sharedFolderId to target a specific folder within it.

    Docs ↗
  • List Shared Folders

    Retrieves mail folders from a shared or delegated mailbox (routes to /users/{userId}/mailFolders). Returns { count, folders } where folders contains each folder's id, displayName, parentFolderId, childFolderCount, totalItemCount, and unreadItemCount. The count field reflects the true API total when Microsoft Graph returns @odata.count; when Include Subfolders is true or Graph does not return @odata.count for the requested filter, count equals the number of folders actually retrieved. Use this action to resolve a shared mailbox folder display name to its ID — set Display Name to filter by exact name. Use Get Shared Folder instead when you already have the folder ID.

    Docs ↗
  • List Labels

    Get all the labels/categories that have been defined for a user.

    Docs ↗
  • List Important Mail

    Get the most important mail from the user's Inbox (messages with high importance or flagged status). Returns { count, data } where count is the true total matching message count reported by Microsoft Graph (@odata.count for the applied filter) and data is the array of retrieved messages (up to maxResults).

    Docs ↗
  • List Folders

    Retrieves mail folders for the authenticated user. Returns { count, folders } where folders contains each folder's id, displayName, parentFolderId, childFolderCount, totalItemCount, and unreadItemCount. The count field reflects the true API total when Microsoft Graph returns @odata.count (supported for top-level mailFolders queries); when Include Subfolders is true or Graph does not return @odata.count for the requested filter, count equals the number of folders actually retrieved. Use this action to resolve a folder display name to its ID — set Display Name to filter by exact name. Use Get Folder instead when you already have the folder ID.

    Docs ↗
  • List Folder IDs to Monitor Options

    Retrieves available options for the Folder IDs to Monitor field.

  • List Contacts

    Get a contact collection from the default contacts folder. Returns { count, contacts } where count is the true total number of contacts in the collection as reported by Microsoft Graph (@odata.count), and contacts is the array of retrieved contact records (up to maxResults).

    Docs ↗
  • List Contact Options

    Retrieves available options for the Contact field.

  • Get Shared Folder

    Retrieve a single folder from a shared mailbox by its ID. Returns the folder's id, displayName, parentFolderId, childFolderCount, totalItemCount, and unreadItemCount. If you only have a display name and need the ID, use List Shared Folders first.

    Docs ↗
  • Get Message

    Fetch a single email message by its Microsoft Graph message ID, including full body and optional attachments. Use Find Email first to search for messages and obtain a message id; then call this tool to retrieve the full content. Set includeAttachments: true to expand attachment metadata — the id field of each attachment is required by Download Attachment. Example: after find-email(search="Eval-Festivus") returns a message with id: "AAMk...", call get-message(messageId="AAMk...", includeAttachments=true) to get the body text and attachment list.

    Docs ↗
  • Get Folder

    Retrieve a single mail folder by its ID. Returns the folder's id, displayName, parentFolderId, childFolderCount, totalItemCount, and unreadItemCount. If you only have a display name and need the ID, use List Folders first.

    Docs ↗
  • Get Current User

    Returns the authenticated Microsoft user's ID, display name, email, and principal name via Microsoft Graph. Call this first when the user says 'my emails', 'my inbox', or needs identity context. Use the returned id to scope queries in Find Email or identify the sender in email results.

    Docs ↗
  • Find Shared Folder Email

    Search for an email in a shared folder in Microsoft Outlook.

    Docs ↗
  • Find Contacts

    Search and list contacts in the authenticated user's Outlook contacts. Returns { count, contacts } where count is the Graph-reported total contact count (@odata.count) and contacts is the filtered result array. Omit searchString to return all contacts up to maxResults. When searchString is provided, filters contacts by displayName, givenName, surname, or email address (case-sensitive substring match). Important: maxResults now bounds how many contacts are fetched from Graph before filtering — contacts beyond that window will not be searched. Example: find-contacts(searchString="George Costanza", maxResults=200) → scans the first 200 contacts and returns matches. Example: find-contacts(searchString="[email protected]") → matches by email address. Use the returned contact id with Save Contact to update the contact.

    Docs ↗
  • Download Attachment

    Download an email attachment to /tmp. Use Find Email to locate the message, then Get Message with includeAttachments: true to get the messageId and attachment id fields. Example: after get-message(messageId="AAMk...", includeAttachments=true) returns attachments: [{ id: "AQMk...", name: "report.pdf" }], call download-attachment(messageId="AAMk...", attachmentId="AQMk...", filename="report.pdf") → writes to /tmp/report.pdf. Set convertToPdf: true to convert images, HTML, plain text, or DOCX files to PDF. For text attachments (text/*, JSON), the response includes fileContent with the decoded text (truncated at 100 KB, flagged by contentTruncated), so the content can be read directly without fetching the file.

    Docs ↗

Write to Microsoft Outlook Email · 11

  • Update Contact

    Update an existing contact, See the docs

  • Send Email

    Send a new email, reply to an existing message, or save a draft — all in one tool. Omit inReplyToMessageId to send a new email. Provide inReplyToMessageId to reply to an existing message (threads correctly). Set isDraft: true to save to Drafts instead of sending immediately. Attach files by passing URLs or /tmp paths to files. Example (send new): send-email(recipients=["[email protected]"], subject="Hello", content="Hi there") Example (reply): send-email(inReplyToMessageId="AAMk...", content="Thanks for your note") Example (draft): send-email(recipients=["[email protected]"], subject="Weekly report", content="...", isDraft=true) Use Find Email to locate a message id before replying.

    Docs ↗
  • Save Contact

    Create or update an Outlook contact (upsert). Omit contactId to create a new contact; provide contactId to update an existing one. Use Find Contacts first to look up a contact's id before updating. Example (create): save-contact(givenName="Cosmo", surname="Kramer", emailAddresses=["[email protected]"]) → creates contact, returns new contact object with id. Example (update): save-contact(contactId="AQMk...", businessPhones=["+1-555-0100"]) → patches the existing contact. See the create documentation See the update documentation

  • Reply to Email

    Reply to an email in Microsoft Outlook.

    Docs ↗
  • Remove Label from Email

    Removes a label/category from an email in Microsoft Outlook.

    Docs ↗
  • Move Email to Folder

    Moves an email to the specified folder in Microsoft Outlook.

    Docs ↗
  • Modify Email

    Apply one or more state mutations to an email message: mark read/unread, add/remove categories, move to a folder, or change the flag status. All params except messageId are optional — only the ones you provide are applied. Use Find Email to obtain a message id before modifying. Recipes: Mark read: isRead: true | Mark unread: isRead: false Add category: addCategories: ["Follow Up"] | Remove category: removeCategories: ["Follow Up"] Move to archive: destinationFolderId: "archive" | Move to inbox: destinationFolderId: "inbox" Flag: flagStatus: "flagged" | Unflag: flagStatus: "notFlagged" | Mark complete: flagStatus: "complete" Example: modify-email(messageId="AAMk...", isRead=true) → marks the message as read. Example: modify-email(messageId="AAMk...", addCategories=["Eval-Seinfeld"], destinationFolderId="archive") → adds a category AND moves to archive in a single call.

    Docs ↗
  • Create Draft Reply

    Create a draft reply to an email.

    Docs ↗
  • Create Draft Email

    Create a draft email,

    Docs ↗
  • Create Contact

    Add a contact to the root Contacts folder,

    Docs ↗
  • Add Label to Email

    Adds a label/category to an email in Microsoft Outlook.

    Docs ↗

Pair Microsoft Outlook Email with your ERP

Leo connects Microsoft Outlook Email to the ERP your business already runs on: the records it reads in Microsoft Outlook Email land in your ERP, and what changes in the ERP flows back.

Odoo logo
Microsoft Outlook Email + Odoo
See Odoo →
NetSuite logo
Microsoft Outlook Email + NetSuite
See NetSuite →

How it works

  1. 01
    Connect Microsoft Outlook Email

    Authorize Microsoft Outlook Email once, in a couple of clicks. Leo only gets the permissions you grant.

  2. 02
    Describe what you need

    In plain language: the dashboard, portal or agent you want across Microsoft Outlook Email and your ERP. No code, no mapping spreadsheets.

  3. 03
    Run it

    Leo builds it, you review, it goes live. Agents run on a schedule or on events, under the guardrails you set.

Microsoft Outlook Email integration: questions

What can Leo do in Microsoft Outlook Email?
Leo has 26 Microsoft Outlook Email actions available: 15 read data and 11 create or update it. Any of them can be combined with your ERP data in an app or an agent.
Which ERPs does the Microsoft Outlook Email integration work with?
Odoo and NetSuite today, through connectors we build and maintain ourselves. Microsoft Outlook Email connects through our connector network, so the same app or agent can use both sides.
Is my data safe?
You authorize Microsoft Outlook Email yourself and choose the permissions. Leo acts within them, every action is logged, and you can revoke the connection at any time.

More communication integrations

  • Gmail logoGmail
  • Microsoft Teams logoMicrosoft Teams
  • Twilio logoTwilio
  • Discord logoDiscord
  • Bot for Slack logoBot for Slack
  • WhatsApp Business logoWhatsApp Business
  • Telegram logoTelegram