Logging All Your Company Email in the CRM

Copy every email your team sends and receives to your CRM address with one Google Workspace or Microsoft 365 rule, so each conversation lands on the right contact without anyone pressing BCC.

Logging All Your Company Email in the CRM

Every Karmaflow.ai workspace has one inbound address of its own. Mail that reaches it is matched to a contact (and a company, by domain), stored, and shown on that contact's Activity Timeline. You can BCC the address by hand from any mailbox — but with one rule in your mail provider's admin console you can send it a copy of every message your team sends and receives, and the CRM fills itself.

This guide sets that up for Google Workspace and for Microsoft 365, explains what the CRM does with each kind of message, and lists what it does not capture.

flowchart LR
    C[Customer] <-->|email| P[Your mail provider<br/>Google Workspace / Microsoft 365]
    P <-->|email| T[Your team's mailboxes]
    P -->|copy of every external message| K[Workspace ingest address<br/>CRM]
    K -->|from outside| I[Logged as received<br/>on the sender's contact]
    K -->|from your domain| O[Logged as sent<br/>on the recipient's contact]
    K -->|colleague to colleague| N[Stored, attached to nobody]

What you'll need

How Karmaflow.ai reads a copy

The rules below hand Karmaflow.ai a copy of each message with the original sender and recipients intact, and that is all it needs. Three things decide what happens next:

The message is… Decided by What the CRM does
From a customer (sender not on one of your domains) The sender's domain Logged as received on the sender's contact. A contact — and a company, by domain — is created when the sender is new.
From your team to a customer The sender's domain Logged as sent on the first external recipient's contact. A new recipient becomes a contact too.
Between colleagues (every address on one of your domains) Every address Stored, but attached to no one and triggering nothing. It appears under Messages that didn't reach anyone so you can see it arrived.
Automated — a newsletter, an out-of-office reply, a bounce, or anything from a no-reply address The message's own headers and the sender address Attached to the sender's contact if one already exists. Never creates a contact. Listed under Messages that didn't reach anyone as Automated mail — no contact created.

"Your domains" are worked out for you: the domains of your team members' sign-in addresses, your sending domains, and anything you add under Settings (the gear icon) → Workspace → Internal Email Domains. Free-mail domains such as gmail.com are never counted as yours, even if a colleague signed in with one — see A colleague on a personal address below.

Step 1 — Prepare the CRM

  1. Open Settings (the gear icon) → Channels → Email Sending and scroll to the Inbound email section.
  2. In the Inbound ingest address card, click Copy. The address looks like <id>@sys.karmaflow.ai; keep it for the rules below. Opening this page also registers the receiving route — the Ingestion behavior card shows Mailgun route provisioned once it has.
  3. In Ingestion behavior, choose a Default owner for auto-created contacts. Every contact the copy rule creates will be owned by this person; leave it on Unowned (visible to all) if you prefer to assign later.
  4. Optional: pick a Pre-filter agent. A task agent that answers {"action":"drop"} for a message stops it before anything is stored — useful for a category you never want in the CRM, such as vendor invoices. Anything the agent cannot classify is allowed through.
  5. Open Settings (the gear icon) → Workspace → Internal Email Domains and check Currently in effect. Add any domain your team writes from that is missing — a sister company, an older domain — under Additional domains. A domain missing here turns every colleague on it into a lead.

Step 2 — Google Workspace

Google's Routing setting adds a recipient to messages that match, and the copy keeps the original From, To and Cc. You create two rules — one for mail coming in, one for mail going out — and leave internal mail alone. You need the Gmail Settings administrator privilege.

In the Google Admin console, go to Menu → Apps → Google Workspace → Gmail → Routing. To apply the rules to everyone, leave the top organizational unit selected; otherwise select a child organizational unit. On the Routing tab click Configure (or Add Another Rule if a rule already exists). In the Add setting box:

Rule 1 — a copy of mail from outside

  1. Enter a descriptive name, for example CRM copy — inbound. A setting without a name cannot be saved.
  2. Under Select when this action is applied, tick Inbound messages only. Leave Internal inbound messages and Internal outbound messages unticked, so colleague-to-colleague mail is not copied.
  3. Leave the Action on Modify message.
  4. Under Modify message, tick Add more recipients and click Add. In the box that opens, leave the recipient type on its default (not Advanced), paste the ingest address, and Save.
  5. Do not tick Change envelope recipient — that bypasses your team's mailboxes and sends the mail to the new recipient instead of copying it.
  6. Leave Select all account types this action applies to on its defaults, and leave the Envelope filter off so every mailbox is covered.
  7. At the bottom of the Add setting box, click Save.

Rule 2 — a copy of mail your team sends

  1. Click Add Another Rule and name it CRM copy — outbound.
  2. Under Select when this action is applied, tick Outbound messages only.
  3. Under Modify message, tick Add more recipients, click Add, paste the ingest address, and Save.
  4. Click Save at the bottom of the box.

Leaving mailboxes out. Two ways, from narrow to broad:

The Envelope filter does the opposite — Only affect specific envelope senders / recipients limits a rule to the addresses you list (a single address, a Pattern match regular expression, or Group membership) — and is the tool when only some mailboxes should be copied.

Timing. Google says rule changes can take up to 24 hours to apply; in practice it is usually much quicker. Routing also only recognises your own domain's outgoing mail if it passes SPF or DKIM, so keep those records healthy.

Step 3 — Microsoft 365

Exchange Online's mail flow rules can add a Bcc recipient to matching messages. Bcc keeps the copy invisible to everyone on the thread, and the original From, To and Cc are preserved. Again, two rules.

Before the rules: the recipient picker in a mail flow rule offers recipients from your directory, and a distribution group cannot be the added recipient. If the picker will not accept an outside address typed in, create a mail contact first — Exchange admin center → Recipients → Contacts → Add a mail contact, with the ingest address as its email — and pick that contact in the rules.

In the Exchange admin center (admin.exchange.microsoft.com), go to Mail flow → Rules and select Add a rule → Create a new rule. Then:

Rule 1 — a copy of mail from outside

  1. On the Set rule conditions page, enter the Name CRM copy — inbound.
  2. Under Apply this rule if…, choose The sender → is external/internal, then Outside the organization.
  3. Under Do the following…, choose Add recipients → to the Bcc box, and select the ingest address (or the mail contact you created).
  4. Select Next. On Set rule settings, leave Rule mode on Enforce and select Next.
  5. On Review and finish, check the summary and select Finish.
  6. The new rule is created disabled — the Exchange admin center does this so you can review it once more. On the Rules page, select the rule and turn its status to Enabled.

Rule 2 — a copy of mail your team sends

  1. Add a rule → Create a new rule, named CRM copy — outbound.
  2. Under Apply this rule if…, choose The recipient → is external/internal, then Outside the organization.
  3. Under Do the following…, choose Add recipients → to the Bcc box and select the ingest address.
  4. Next → Enforce → Next → Finish, then enable the rule as above.

Because each rule is scoped to mail crossing your organization's boundary, colleague-to-colleague mail is never copied.

Leaving mailboxes out. In either rule, under Except if…, select Add exception and choose The sender → is this person (or The sender → is a member of this group) for mail going out, and The recipient → is this person (or is a member of this group) for mail coming in. A group is the easier way to maintain the list; Exchange caches group membership for a few hours, so a change to the group is not instant.

Do not use journaling. Exchange's journaling feature also sends copies, but wraps each message inside a journal report whose sender is Microsoft's journaling address. Karmaflow.ai reads the report, not the message inside it, so every copy would be filed under the wrong sender. Use mail flow rules.

Timing. Microsoft says a new or changed rule can take 30 minutes or more to apply to mail.

Labels above follow Google's and Microsoft's own administrator help as of October 2026. Both consoles change their wording from time to time; if a label does not match what you see, look for the same idea — a rule that adds a recipient to messages crossing your organization's boundary, never one that redirects them.

Step 4 — Test it

  1. From a mailbox outside your company, send a message to one of your team.
  2. Open that sender's record in CRM → Records → Contacts (search by the address). Within about a minute the message appears on the Activity Timeline with a received badge; if the sender was new, the contact — and a company named after the domain — were created for it.
  3. Now have that team member reply from their normal mailbox. The reply appears on the same timeline with a sent badge.
  4. Click Open thread on either row to read the message. The detail page offers Reply and a link to the Contact.

If nothing arrives after five minutes, see Troubleshooting.

What you get

What it does not do

Attachments are not stored. Karmaflow.ai keeps each attachment's name, type and size, not the file. If attachments matter for an address, route that address to a group inbox as well.

One timeline per message. The thread row appears on the first external person's timeline — the sender for incoming mail, the first outside recipient for your team's. Other external people on the thread still get a contact record if they are new, but the message is not shown on their timeline.

A message is stored once. Copies are matched on the message's own ID. If one message reaches the ingest address twice — through the inbound rule and a Cc, say — it is stored once. If you also route an address to a group inbox, test deliberately: the two paths can de-duplicate against each other, so a message may appear in only one of them.

Automated mail creates nothing. Newsletters, out-of-office replies, bounces and anything from a no-reply address attach to an existing contact only. They appear under Messages that didn't reach anyone on the Email Sending page as Automated mail — no contact created, with the message linked, so if one turns out to be a person you can create the contact; their next message will attach by itself.

A colleague on a personal address

A team member who sends from a personal Gmail or Outlook.com address is not on one of your domains, so their messages are treated as a customer's and a contact may be created for them. Do not add gmail.com to Internal Email Domains — that would make every Gmail sender a colleague and stop their contacts being created. Exclude that mailbox from the provider rule instead, or let the record exist and merge it under CRM → Setup → Contact Cleanup.

Tell your team

Your provider's rule copies mail silently — nothing on a message says it was logged. Tell the people whose mailboxes are covered, and leave out the ones that handle personal or privileged matters.

Troubleshooting

Nothing arrives at all. On the Email Sending page, check Ingestion behavior reads Mailgun route provisioned. Then confirm the rule targets the right direction (Inbound messages / Outbound messages in Google; Outside the organization on the sender or recipient in Exchange), that it is Enabled (Exchange creates rules disabled), that enough time has passed (Google allows up to 24 hours, Exchange 30 minutes or more), and that the ingest address is spelled exactly as copied.

My team's replies are logged as received, not sent. The sender's domain is not in Internal Email Domains. Add it under Additional domains and send another test.

A message shows under "Messages that didn't reach anyone". Read the row — it says why. Matched no customer means every address was one of yours (a colleague-to-colleague message your rule let through); Automated mail means a newsletter, auto-reply or no-reply sender with no existing contact; Dropped by your pre-filter means your pre-filter agent refused it.

A customer's reply did not attach to the campaign thread. Copies arriving through a provider rule carry the original headers, so replies thread normally. A rule that rewrites the subject or strips headers breaks this — prefer a rule that only adds a recipient.

The message appears with the right time but was received hours later. That is correct: the stored date is the one the sender's mail client wrote, not the moment the copy arrived.

Related