diff --git a/src/DigitalData.EmailProfiler.Domain/ValueObjects/EmailAddress.cs b/src/DigitalData.EmailProfiler.Domain/ValueObjects/EmailAddress.cs
new file mode 100644
index 0000000..aa647f0
--- /dev/null
+++ b/src/DigitalData.EmailProfiler.Domain/ValueObjects/EmailAddress.cs
@@ -0,0 +1,45 @@
+using System.ComponentModel.DataAnnotations;
+using DigitalData.EmailProfiler.Domain.Common;
+using DigitalData.EmailProfiler.Domain.Exceptions;
+
+namespace DigitalData.EmailProfiler.Domain.ValueObjects;
+
+///
+/// Value object representing an email address with validation
+///
+public class EmailAddress : ValueObject
+{
+ public string Value { get; private set; }
+ public string Domain { get; private set; }
+ public string LocalPart { get; private set; }
+
+ private EmailAddress(string value)
+ {
+ Value = value;
+ var parts = value.Split('@');
+ LocalPart = parts[0];
+ Domain = parts[1];
+ }
+
+ public static EmailAddress Create(string email)
+ {
+ if (!IsValid(email))
+ throw new DomainException($"Invalid email address: {email}");
+
+ return new EmailAddress(email.ToLowerInvariant());
+ }
+
+ private static bool IsValid(string email)
+ {
+ return !string.IsNullOrWhiteSpace(email) &&
+ email.Contains('@') &&
+ new EmailAddressAttribute().IsValid(email);
+ }
+
+ protected override IEnumerable