All posts

Dynamics 365: Verify Contact and Lead Emails Before a Customer Insights Journey

··5 min read

To verify emails in Dynamics 365, export your contacts and leads with Export to Excel or the Power Apps data export, run the email column through a verifier, then use Import from CSV with an alternate key to write the result back to each record. Send journeys only to the valid group. Microsoft's policy for Customer Insights - Journeys sets an 8% hard bounce limit and a 0.3% complaint limit, and accounts that break them can be suspended.

All Microsoft facts below are from Microsoft Learn, read on 2 November 2026.

Microsoft's email rules for Journeys

From the Customer Insights - Journeys email policies:

Rule Microsoft's wording
Hard bounces "The hard bounce limit is 8%. The preferred bounce rate is less than 2%."
Complaints "The spam complaint rate limit is 0.3% (1 in 1,000 messages sent)."
Lists "Lists scraped, purchased, or rented from third-party providers are prohibited and are grounds for termination."
Enforcement "If email criteria are violated, accounts are suspended or terminated."

Recovery means opening a support ticket and then contacting Microsoft's deliverability team, so a suspension can stop marketing email for days.

Plan around the 2% figure. The 8% limit is where Microsoft acts; your mail's placement at Gmail and Outlook suffers long before that.

How suppression works

The suppression list docs explain what happens after a bounce:

  • A hard bounce (invalid mailbox or invalid domain) keeps the address suppressed for 180 days.
  • "Five consecutive sending attempts to the same email address that result in soft bounces result in the email address being added to the suppression list."
  • Spam-complaint listings "don't expire automatically".
  • The list works "at an email address level, not at a contact or lead level".

The last point matters for clean-up. If a contact's address is dead, deleting the contact does not fix anything; correcting the address does. On a contact, the Communication tab shows each address as "Not in the suppression list", "On suppression list" or "Permanently blocked".

Step 1: Export contacts and leads

From the app. Open Contacts (or Leads), pick a view with the columns you need, and click Export to Excel on the command bar (export to Excel). A dynamic worksheet can export "up to 100,000 rows at a time" (dynamic worksheet). If the export times out, export smaller filtered views.

As CSV. With the Environment Maker role, go to make.powerapps.com, then Tables, then Export, then Export data, choose the table and click Download exported data. Microsoft says exports have a 12-minute time limit (import and export data).

Keep the record ID column (the contact or lead GUID) and the email address. Add Last Name for contacts, or Topic, Last Name and Company Name for leads, since the import requires those.

If the export is an .xlsx, the verify page reads it directly; no need to convert.

Step 2: Remove what you should not check

  • Records with no email or with "Do not allow Bulk Emails" set. They will not receive journeys anyway.
  • Addresses already suppressed or opted out. Check consent in the consent center, where contact points show Opted in, Opted out or not set (consent).
  • Duplicates. Dynamics often has the same person as a lead and a contact. Remove duplicate emails collapses the email column; keep the IDs of both records so you can update each.

Step 3: Verify

Upload the file on the verify page. Each address gets a live mailbox check, and the ID column stays in the file. Many Dynamics customers sell to companies that run Microsoft 365, and a share of those domains behave as catch-all, so expect a catch-all group. Verify emails behind security gateways covers why some corporate domains give no clear answer.

Result Write back to Dynamics as
Valid Email check = Valid
Catch-all Email check = Catch-all; small, separate journeys
Unknown Email check = Unknown; re-check later
Invalid Email check = Invalid; exclude, look for a new address
Disposable Email check = Invalid

Step 4: Add a column for the result

In Power Apps, add a Choice column to Contact and Lead, such as Email check with Valid, Catch-all, Unknown and Invalid, plus a date column Email checked on. The import maps option-set values, so the CSV can hold the text labels.

If you want to match on email rather than the record ID, define an alternate key on the email column first. Without a key, the GUID is what matches.

Step 5: Re-import the results

From import data in Customer Insights - Journeys:

  1. Build a small CSV: record ID (or email, if you set the alternate key), the required name fields, Email check and Email checked on.
  2. Keep it under 8MB, the default maximum, and to 20,000 rows or fewer per file as Microsoft recommends (import data). The email list splitter cuts large files.
  3. Open the Contacts view and choose Import from CSV.
  4. Choose the alternate key if you set one, and the data delimiter.
  5. Click Review Mapping and map the columns. Leave everything else unmapped.
  6. Click Finish Import.

Microsoft says records are updated if the alternate key matches and created otherwise, so a typo in the key column creates a new record; check the counts in the import job. Failed rows can be downloaded with Export Error Rows.

Repeat for Leads.

Step 6: Use the result in segments

  • Add Email check equals Valid to every journey segment.
  • Build a separate segment for catch-all contacts and send to it in small batches after the main send.
  • Keep a segment of Email check contains no data so new records get checked before they enter a journey.

For new leads, call the email verification API from Power Automate when a lead is created. Verify emails with Power Automate has the flow.

Checklist

  • Record IDs and required name fields in the export
  • Suppressed, opted-out and no-email records left out
  • Every address verified
  • Email check and Email checked on columns on Contact and Lead
  • Results imported with an alternate key or GUID, under 8MB and 20,000 rows per file
  • Journey segments filtered to Email check = Valid

Verify your Dynamics export

Upload your Excel or CSV export on the verify page. You get 100 free email checks when you sign in with Google, no card, enough to check a sample before a large journey. For bigger databases, monthly plans are on the pricing page.

Common questions

What is the bounce limit in Dynamics 365 Customer Insights - Journeys?

Microsoft's email policy page says the hard bounce limit is 8% and the preferred bounce rate is less than 2%. The spam complaint limit is 0.3%. If the criteria are violated, accounts can be suspended or terminated.

How do I export contacts from Dynamics 365 to a file?

Open the Contacts or Leads view and use Export to Excel on the command bar; a dynamic worksheet can export up to 100,000 rows at a time. For a CSV, makers with the Environment Maker role can use make.powerapps.com, then Tables, then Export, then Export data, which has a 12-minute time limit.

How do I update existing contacts from a CSV in Dynamics 365?

Use Import from CSV on the table's view and choose an alternate key, such as one defined on email. Microsoft says records are updated when the alternate key matches and created otherwise. Without an alternate key, a matching record GUID updates the record. Keep files to 8MB by default and, as Microsoft recommends, 20,000 rows or fewer.

Does Dynamics 365 suppress bounced emails automatically?

Customer Insights - Journeys does. A hard bounce puts the address on the suppression list for 180 days, and five consecutive soft bounces to the same address also add it. Spam complaint listings do not expire automatically. Suppression works by email address, not by contact or lead.

Can I use a purchased list in Customer Insights - Journeys?

No. Microsoft's email policy says lists scraped, purchased or rented from third-party providers are prohibited and are grounds for termination.

Check your list before you send

Real mailbox checks over SMTP, and nothing is sent to the address. Sign in with Google and your first 100 email checks are free, no card. Plans for bigger lists are on the pricing page.