> Enrich.chat gives AI agents verified work emails and mobiles. To use it from an agent, read https://enrich.chat/agents.md . This is the Markdown version of https://enrich.chat/blog/hard-bounce-vs-soft-bounce/

# Hard bounce vs soft bounce: how the SMTP codes differ and what to do with each

A hard bounce is a permanent failure and a soft bounce is a temporary one. See how the reply codes show it, where the codes mislead, how long senders keep retrying, and what to do next.

By Enrich.chat Editorial. Updated October 16, 2026.

**Short answer:** A hard bounce is a permanent delivery failure, such as an address that does not exist. It returns a 5yz SMTP reply, and [RFC 5321](https://www.rfc-editor.org/rfc/rfc5321.html#section-4.2.1) says the sender should not repeat the exact request. A soft bounce is a temporary failure, such as a full mailbox. It returns a 4yz reply, and [Mailchimp](https://mailchimp.com/help/soft-vs-hard-bounces/) turns repeat soft bounces into hard ones after 7 to 15.

## Key takeaways

- The first digit of the SMTP reply decides the type: 4yz is temporary and may be retried, 5yz is permanent. RFC 3463 status codes add the reason, such as 5.1.1 for a mailbox that does not exist.
- Codes can mislead. Google returns 550 5.7.1 for policy and reputation blocks on your mail, and a full inbox is hard at 552 5.2.2 but soft at 452 4.2.2.
- Retry windows are measured in days: HubSpot and Twilio SendGrid retry for up to 72 hours, RFC 5321 says give-up time generally needs to be at least 4 to 5 days, and Postfix defaults to 5 days.
- Repeat soft bounces become hard ones by count: Klaviyo suppresses an address after more than 7 in a row, and Mailchimp converts it after 7 to 15.
- Only Amazon SES publishes a bounce line, and it counts hard bounces only: 5% puts an account under review and 10% may pause it. Google and Yahoo name no bounce number.

## What is the difference between a hard bounce and a soft bounce?

A hard bounce is a permanent delivery failure, and a soft bounce is a temporary one. [Mailchimp](https://mailchimp.com/help/soft-vs-hard-bounces/) gives the usual causes. A hard bounce means the address does not exist or the recipient's server has permanently blocked delivery. A soft bounce means a full mailbox, an offline server or a similar problem that can clear.

The split decides what a sender does next: no repeat after a permanent failure, a retry after a temporary one. The table lines up the two types.

|  | Hard bounce | Soft bounce |
| --- | --- | --- |
| SMTP reply | 5yz, permanent | 4yz, temporary |
| Status code class | 5.x.x | 4.x.x |
| Will resending help | Rarely. The client should not repeat the exact request | Often. The client should try again |
| What platforms do | Suppress the address at once | Retry, then suppress after repeats |
| Counts toward the Amazon SES bounce rate | Yes | No |

This guide covers the codes behind the labels and the decisions that follow. For bounce-rate benchmarks and platform limits, read our guide to [email bounce rate](https://enrich.chat/blog/email-bounce-rate/).

## How do SMTP reply codes tell a hard bounce from a soft bounce?

The first digit of the SMTP reply decides. Under [section 4.2.1 of RFC 5321](https://www.rfc-editor.org/rfc/rfc5321.html#section-4.2.1), a 4yz reply is a transient failure: the error is temporary and the sender should try again. A 5yz reply is permanent, and the client should not repeat the exact request. The RFC's test for the line between them is whether the command could succeed if it were repeated unchanged.

That rule has a catch. The same section says even some permanent error conditions can be corrected, for example after a spelling is fixed or an account status changes. A 5yz reply means that sending the same thing again will not work, not that the person is gone for good.

### What do enhanced status codes add?

[RFC 3463](https://www.rfc-editor.org/rfc/rfc3463.html) adds a second code, written class.subject.detail, such as 5.1.1. Class 4 is a persistent transient failure, where sending in the future may be successful. Class 5 is a permanent failure that is not likely to be resolved by resending the message in its current form. The subject says where the problem sits: 1 for addressing, 2 for the mailbox, 4 for network and routing, and 7 for security or policy. Two details help most on a list: X.1.1 means the mailbox does not exist, and X.2.2 means it is full.

### Where does the code show up?

It arrives in a delivery status notification, the bounce message. [RFC 3464](https://www.rfc-editor.org/rfc/rfc3464.html) gives that notice an Action field. The value failed means the message could not be delivered and the server has stopped trying. The value delayed means it has not been delivered so far, but the server will keep trying. A Status field carries the RFC 3463 code, and a Diagnostic-Code field carries the receiving server's own reply. [Amazon SES's notification format](https://docs.aws.amazon.com/ses/latest/dg/notification-contents.html) shows the same split: its sample failed recipient has status 5.0.0 and its sample delayed one has 4.0.0. Here are two illustrative notices for fictional people on example.com.

```
Final-Recipient: rfc822; sam.ortiz@example.com
Action: failed
Status: 5.1.1
Diagnostic-Code: smtp; 550 5.1.1 User unknown

Final-Recipient: rfc822; lee.park@example.com
Action: delayed
Status: 4.2.2
Diagnostic-Code: smtp; 452 4.2.2 Mailbox full
```

Read the Status and Diagnostic-Code lines before you decide anything. They hold more than the label your sending tool shows.

### Does a bounce always happen during the send?

No. A bounce can come while the connection is open, or after the receiving server has already accepted the message. [Twilio SendGrid's documentation](https://www.twilio.com/docs/sendgrid/ui/sending-email/bounces) calls these synchronous and asynchronous bounces. [Mailgun](https://documentation.mailgun.com/docs/mailgun/user-manual/tracking-messages/tracking-failures) calls them immediate and delayed, and says the delayed kind arrives as a non-delivery report email.

The reason is in [section 6.1 of RFC 5321](https://www.rfc-editor.org/rfc/rfc5321.html#section-6.1). When a server answers 250 OK to the message data, it takes responsibility for delivering or relaying the message. If delivery then fails, it must mail a notification. Some such failures are unavoidable, the RFC says. Figure 1 shows the three paths.

**Figure 1: Three ways a message bounces.** A three row map from the server reply to the result. A 5yz reply in the session means the server refuses the message and the sender does not retry, which is an immediate hard bounce. A 4yz reply in the session means the server defers it and the sender retries until it gives up, which is a soft bounce that may clear or fail. A 250 OK followed by a later failure means the server accepted the message and then mails a failure notice, which is a delayed bounce that may be hard or soft.

*The three ways a message bounces. Reply classes follow [RFC 5321 section 4.2.1](https://www.rfc-editor.org/rfc/rfc5321.html#section-4.2.1), and the late bounce follows [section 6.1](https://www.rfc-editor.org/rfc/rfc5321.html#section-6.1).*

A catch-all domain is the classic late hard bounce: its server says yes to every recipient during the send, and a bad address can fail afterward. The guide to [catch-all emails](https://enrich.chat/blog/what-is-a-catch-all-email/) explains why servers work this way.

## Which SMTP codes mean a hard bounce, and which mean a soft bounce?

Mailbox providers publish their own lists, and the first digit holds across all of them. The table shows common codes from Google, Exchange Online and Yahoo, with the type each implies.

| Code | What the provider says it means | Type | Source |
| --- | --- | --- | --- |
| 550 5.1.1 | The recipient account does not exist. Exchange Online: bad destination mailbox address | Hard | [Google](https://knowledge.workspace.google.com/admin/support/troubleshooting/gmail-smtp-errors-and-codes), [Microsoft](https://learn.microsoft.com/en-us/troubleshoot/exchange/email-delivery/ndr/non-delivery-reports-in-exchange-online) |
| 5.1.10 | Exchange Online: SMTP address lookup did not find the recipient | Hard | [Microsoft](https://learn.microsoft.com/en-us/troubleshoot/exchange/email-delivery/ndr/non-delivery-reports-in-exchange-online) |
| 5.4.1 | Exchange Online: recipient address rejected, access denied, because the address does not exist | Hard | [Microsoft](https://learn.microsoft.com/en-us/troubleshoot/exchange/email-delivery/ndr/non-delivery-reports-in-exchange-online) |
| 553, 554 | Permanent. Do not retry; remove the address if the recipient does not exist | Hard | [Yahoo](https://senders.yahooinc.com/smtp-error-codes/) |
| 450 4.2.1 | The recipient is receiving mail too quickly | Soft | [Google](https://knowledge.workspace.google.com/admin/support/troubleshooting/gmail-smtp-errors-and-codes) |
| 452 4.2.2 | The recipient's inbox is full | Soft | [Google](https://knowledge.workspace.google.com/admin/support/troubleshooting/gmail-smtp-errors-and-codes) |
| 421 4.7.28 | Gmail saw an unusually high volume of unsolicited mail from the sender | Soft, but about you | [Google](https://knowledge.workspace.google.com/admin/support/troubleshooting/gmail-smtp-errors-and-codes) |
| 4.4.7 | Exchange Online: the message expired in the queue before delivery | Soft that ran out of time | [Microsoft](https://learn.microsoft.com/en-us/troubleshoot/exchange/email-delivery/ndr/non-delivery-reports-in-exchange-online) |

Two patterns help you read any code. Per RFC 3463, a subject of 1 points at addressing and a subject of 7 points at security or policy. So a 5.1.x error is about the address, and a 5.7.x error is about the sender. The next section covers the second kind.

## Can a hard bounce be a good address, or a soft bounce a dead one?

Yes, in both directions. [Mailchimp](https://mailchimp.com/help/soft-vs-hard-bounces/) notes that valid addresses occasionally hard bounce. [HubSpot](https://knowledge.hubspot.com/marketing-email/what-is-the-difference-between-a-hard-bounce-and-a-soft-bounce) says a hard bounce usually indicates a permanent error but can also come from a strict email security filter. Figure 2 shows five codes that need a second look.

**Figure 2: Five bounce codes and what to do with each.** A five row table. 550 5.1.1 is permanent and means the address does not exist, so treat it as a hard bounce and suppress it. 550 5.7.1 is permanent but is a block on your mail, so treat it as a hard bounce and fix your setup. 552 5.2.2 is permanent and means the inbox is full and inactive, so suppress it. 452 4.2.2 is temporary and means the inbox is full, so retry as a soft bounce. 4.4.7 is a queue timeout, so count the repeat as a soft bounce.

*Five codes and what to do with each. The inbox-full rows show one cause with two classes. Meanings from [Google's Gmail SMTP error list](https://knowledge.workspace.google.com/admin/support/troubleshooting/gmail-smtp-errors-and-codes) and [Microsoft's Exchange Online error list](https://learn.microsoft.com/en-us/troubleshoot/exchange/email-delivery/ndr/non-delivery-reports-in-exchange-online). The treatments are this guide's suggestions.*

- **A block on your mail.** [Google's 550 5.7.1](https://knowledge.workspace.google.com/admin/support/troubleshooting/gmail-smtp-errors-and-codes) is a broad code. Causes include a policy rule, low-reputation or rate-limited mail, bad headers, and an unauthorized sending IP. Its 550 5.7.26 means the sender was unauthenticated. The contact is fine, and your setup is not.
- **A full mailbox.** Google returns 452 4.2.2 for a full inbox and says it may succeed later. It returns 552 5.2.2 when the inbox is full and inactive, which is permanent. [HubSpot](https://knowledge.hubspot.com/marketing-email/what-is-the-difference-between-a-hard-bounce-and-a-soft-bounce) lists mailbox full as a hard bounce reason, for an inbox that is inactive or over its quota for a long time. [Postmark](https://postmarkapp.com/developer/api/bounce-api) files mailbox full under soft bounces.
- **A dead domain that looks soft.** Mailchimp lists "domain name does not exist" among soft bounce reasons, and notes it may be temporary. A domain that is gone for good can start as a soft bounce and turn hard only after repeats.
- **The same number, a different meaning.** RFC 3463 defines X.2.2 as mailbox full. Exchange Online's list uses 5.2.2 for "Submission quota exceeded", a limit on the sender. Read the text next to the code.

### Why do platforms label the same bounce differently?

Beyond 4yz and 5yz, there is no shared set of labels. Each platform adds its own buckets, so one event can land in different ones.

| Platform | Bounce labels |
| --- | --- |
| [Amazon SES](https://docs.aws.amazon.com/ses/latest/dg/notification-contents.html) | Permanent (hard), Transient (soft) and Undetermined. Soft subtypes include MailboxFull, MessageTooLarge, ContentRejected and AttachmentRejected |
| [Postmark](https://postmarkapp.com/developer/api/bounce-api) | HardBounce, SoftBounce, Transient (message delayed), Blocked (ISP block), DMARCPolicy and others |
| [HubSpot](https://knowledge.hubspot.com/marketing-email/what-is-the-difference-between-a-hard-bounce-and-a-soft-bounce) | Hard, soft, pending (retried for up to 72 hours) and global (a hard bounce in three or more HubSpot accounts) |
| [Mailchimp](https://mailchimp.com/help/soft-vs-hard-bounces/) | Hard and soft |

Before you compare bounce rates across tools, check which labels each one counts.

## How long do senders retry a soft bounce?

Senders retry for days, and many platforms cap the effort at 72 hours. Both [HubSpot](https://knowledge.hubspot.com/marketing-email/what-is-the-difference-between-a-hard-bounce-and-a-soft-bounce) and [Twilio SendGrid](https://www.twilio.com/en-us/blog/insights/email-bounce-management) retry for up to 72 hours. If delivery still fails, HubSpot records a soft bounce and SendGrid moves the address to a deferral list.

The standard is more patient. [Section 4.5.4.1 of RFC 5321](https://www.rfc-editor.org/rfc/rfc5321.html#section-4.5.4.1) says the retry interval should be at least 30 minutes and the give-up time generally needs to be at least 4 to 5 days. It adds that experience favors two connection attempts in the first hour and then one every two or three hours. [Postfix](https://www.postfix.org/postconf.5.html), a common open-source mail server, treats a message as undeliverable after 5 days by default, with 300 to 4,000 seconds between attempts.

Others give no number. [Amazon SES](https://docs.aws.amazon.com/ses/latest/dg/notification-contents.html) redelivers for a certain period of time and then stops, and its page does not say how long. [Mailgun](https://documentation.mailgun.com/docs/mailgun/user-manual/tracking-messages/tracking-failures) retries only if the bounce was both immediate and soft, and stops after several unsuccessful attempts. Figure 3 charts the numbers that are published.

**Figure 3: How long senders retry, and how many soft bounces they allow.** Two bar charts. The first shows hours a sender keeps retrying: HubSpot 72 hours, Twilio SendGrid 72 hours, the RFC 5321 give-up time at least 4 to 5 days, and the Postfix default of 5 days. The second shows soft bounces before suppression: Klaviyo more than 7 in a row, Mailchimp 7 for an address with no activity, and Mailchimp up to 15 for a contact with past activity.

*Published retry windows and soft bounce limits. The pale part of the RFC bar shows the range "at least 4 to 5 days". Sources: [HubSpot](https://knowledge.hubspot.com/marketing-email/what-is-the-difference-between-a-hard-bounce-and-a-soft-bounce), [Twilio SendGrid](https://www.twilio.com/en-us/blog/insights/email-bounce-management), [RFC 5321](https://www.rfc-editor.org/rfc/rfc5321.html#section-4.5.4.1), [Postfix](https://www.postfix.org/postconf.5.html), [Klaviyo](https://help.klaviyo.com/hc/en-us/articles/360057036052-How-to-Decrease-Bounce-Rate) and [Mailchimp](https://mailchimp.com/help/soft-vs-hard-bounces/).*

### How many soft bounces before an address is suppressed?

Platforms also count soft bounces across sends. [Klaviyo](https://help.klaviyo.com/hc/en-us/articles/360057036052-How-to-Decrease-Bounce-Rate) suppresses an address that soft bounces more than 7 consecutive times. [Mailchimp](https://mailchimp.com/help/soft-vs-hard-bounces/) converts a soft bounce to a hard one after 7 soft bounces for contacts with no subscriber activity, and up to 15 for contacts with earlier activity.

Klaviyo also suggests a review segment: anyone with at least four bounced emails in the last 90 days. No standard sets these numbers, so pick one rule for your own list and apply it every time.

## What causes hard bounces and soft bounces?

Hard bounces come from addresses and blocks that will not fix themselves. Soft bounces come from conditions that usually clear. Our [email bounce rate](https://enrich.chat/blog/email-bounce-rate/) guide lists the list-quality causes behind a high rate.

### Common causes of hard bounces

- **The mailbox does not exist.** A typo or a wrong guess at the address format leaves an address with no mailbox, and [Google answers 550 5.1.1](https://knowledge.workspace.google.com/admin/support/troubleshooting/gmail-smtp-errors-and-codes). [Exchange Online](https://learn.microsoft.com/en-us/troubleshoot/exchange/email-delivery/ndr/non-delivery-reports-in-exchange-online) adds a moved mailbox to the causes of its 5.1.1 error. Our guide to [whether ChatGPT can find email addresses](https://enrich.chat/blog/can-chatgpt-find-email-addresses/) shows how guesses go wrong.
- **The domain cannot take mail.** RFC 3463 defines X.1.2 as a bad destination system address: the domain does not exist or cannot accept mail. Our [email validation guide](https://enrich.chat/blog/email-validation/) covers the DNS checks.
- **The person left.** A work email follows the job, so a contact who changed employers can leave a dead address behind. Our guide to [B2B data decay](https://enrich.chat/blog/b2b-data-decay/) compares published rates.
- **A recycled address.** [Spamhaus](https://www.spamhaus.org/resource-hub/deliverability/spamtraps-fix-the-problem-not-the-symptom/) says mail to addresses that an ISP has turned off is rejected with a hard bounce for a period, often 12 months or more. The addresses are then silently turned back on as spamtraps.

### Common causes of soft bounces

- **A full mailbox.** Google returns 452 4.2.2, and [Mailchimp](https://mailchimp.com/help/soft-vs-hard-bounces/) lists a mailbox that is over its limit.
- **Too much mail, too fast.** Google returns 450 4.2.1 when a recipient is receiving mail too quickly. [Exchange Online](https://learn.microsoft.com/en-us/troubleshoot/exchange/email-delivery/ndr/non-delivery-reports-in-exchange-online) throttles a mailbox that receives too many messages too quickly.
- **A busy or offline server.** Google's 421 family covers a busy server or a temporary problem, and Mailchimp lists a recipient server that is down or offline.
- **Greylisting.** [RFC 6647](https://www.rfc-editor.org/rfc/rfc6647.html) defines it as temporarily degraded service to unknown email clients, and says it works because spamware typically does not retry. A sender that retries gets through.
- **Size or content limits.** Amazon SES files MessageTooLarge, ContentRejected and AttachmentRejected as transient.

## What should you do after a hard bounce or a soft bounce?

Read the code first, then act on the type.

### After a hard bounce

1. **Read the status code.** A 5.1.1, 5.1.2 or 5.1.10 points at the address. A 5.7.x points at policy, authentication or reputation.
2. **Suppress dead addresses everywhere, at once.** [Amazon SES](https://docs.aws.amazon.com/ses/latest/dg/notification-contents.html) says to remove a hard-bounced address from your mailing lists immediately, and [Yahoo](https://senders.yahooinc.com/smtp-error-codes/) says not to retry a 5xx. Keep the address on a suppression list instead of deleting the contact, so no other tool mails it again. Our [database hygiene checklist](https://enrich.chat/blog/database-hygiene/) explains why.
3. **Fix your side when the code points at you.** [Google](https://support.google.com/a/answer/81126) asks bulk senders of 5,000 or more messages a day to set up SPF, DKIM and DMARC. For a security filter block, [HubSpot](https://knowledge.hubspot.com/marketing-email/what-is-the-difference-between-a-hard-bounce-and-a-soft-bounce) tells you to ask the contact's IT team to allowlist your sending IPs. Then test with one address before you send in volume.
4. **Treat a departed contact as a new lead.** The old address stays suppressed. Look for a new one, and give it its own check.

### After a soft bounce

1. **Let the platform retry first.** Retries run for hours or days, as the previous section shows.
2. **Count repeats per address.** Use your platform's limit, or the review segment Klaviyo suggests.
3. **Slow down when soft bounces cluster.** [Google's sender guidelines](https://support.google.com/a/answer/81126) say that if messages start bouncing or being deferred, you should reduce the sending volume until the SMTP error rate decreases.
4. **Hold or suppress at your limit.** Mailchimp and Klaviyo do this for you once an address reaches 7 or more soft bounces.

## What do Google, Yahoo and Amazon SES say about bounces?

Only Amazon SES publishes a bounce-rate line. Google and Yahoo name no bounce number, but both tell senders to act on bounces.

- **Amazon SES.** Its [bounce rate](https://docs.aws.amazon.com/ses/latest/dg/reputationdashboardmessages.html) is based on hard bounces. Soft bounces, automatic replies such as out-of-office messages and bounces from its account-level suppression list are left out. SES says to keep the rate below 5%, reviews an account at 5% or more, and might pause sending at 10% or more.
- **Google.** Its [sender guidelines](https://support.google.com/a/answer/81126) set a spam rate below 0.10% and say never to reach 0.30%. On bounces, they list automatically unsubscribing recipients with multiple bounced messages as one option, and tell you to cut volume if messages bounce or are deferred.
- **Yahoo.** Its [best practices](https://senders.yahooinc.com/best-practices/) say to monitor hard and soft bounces, remove invalid recipients promptly, and keep the spam rate below 0.3%.

A missing number is not permission to ignore bounces. Our [email bounce rate guide](https://enrich.chat/blog/email-bounce-rate/) covers the 2% target and sets each platform's limit side by side.

## How does Enrich.chat help you avoid hard bounces?

Enrich.chat gives your AI agent a work email with a status label, so the agent can send first to some addresses and hold back others. It does not send email, read bounces or keep a suppression list. It is a contact data API that an agent learns from one prompt.

A common hard bounce is a 5.1.1 for a mailbox that does not exist, and a guessed address is an easy way to get one. The `GET /v1/email` endpoint takes a name and a company website, or a LinkedIn URL, and returns a work email with one of three labels: `verified`, `catch_all` or `unknown`. A label is not a delivery guarantee, and every contact is a strong lead, not a certainty.

The `catch_all` label matters most for bounces. It means the domain accepts every address, so the mailbox cannot be confirmed. A catch-all server accepts a bad address during the send, and the failure can come back later as a delayed bounce. [Hunter](https://hunter.io/email-verification-guide/accept-all-catch-all/), a verifier vendor, sent one campaign to 100 accept-all and 100 valid addresses and saw bounce rates of 27% and 1%. That is one small vendor test, but the gap is wide. The free [catch-all checker](https://enrich.chat/tools/catch-all-checker/) tests a domain.

Here is a lookup for a fictional person on example.com. The response is illustrative.

```
GET https://enrich.chat/v1/email?name=Marta%20Kowal&domain=example.com

{
  "found": true,
  "work_email": {"value": "marta.kowal@example.com", "status": "verified"},
  "pattern": "first.last@example.com",
  "name": "Marta Kowal",
  "title": "Head of Finance",
  "credits_used": 10,
  "free_lookups_remaining": 9
}
```

When nothing is found, the response is `{"found": false}` and the lookup uses 0 credits. It may carry a `guess` built from the company's usual format. A guess is not data, so never send to it. The table shows how to sort the rest.

| Label | What it tells you | Suggested action |
| --- | --- | --- |
| verified | The mailbox is labelled verified | Send first, in small batches, and watch bounces |
| catch_all | The domain accepts every address, so the mailbox cannot be confirmed | Hold it, or test in small batches once you have a second sign the person is real |
| unknown | Not verified | Leave it out until you can check the address another way |
| not found | No address returned | Skip it. Nothing is used |

### What can you do after a hard bounce?

If the bounce was a person who left, ask for their work email again with `GET /v1/person`, their LinkedIn URL and `fields=email`. The URL is only a lookup key, and Enrich.chat never logs in to LinkedIn. The call may return a different address, the same one or none. Treat a new address as a new lead with its own status, and keep the bounced one suppressed.

Credit maths for a clean-up: re-checking 300 bounced contacts needs 3,000 credits if every one matches, which fits the Growth plan at $29 a month. Lookups that find nothing use 0 credits, and the API also gives 10 free lookups a day with no signup.

Know the gaps before you build on it:

- There is no standalone verification endpoint. The email input on `/v1/person` looks up the person behind a work email, not whether it delivers, and personal mailboxes such as Gmail are not looked up.
- Enrich.chat does not send email, read bounces or manage suppression. Your sending tool and CRM do that.
- The self-serve plans have no bulk upload or export. Agents look up one person at a time, at about one request a second.
- A search with `with_email=true` returns each person's work email with the status `unknown`. Use `/v1/email` or `/v1/person` when you need the status.

This prompt re-checks a list of bounced contacts and sorts the results:

```text
Use www.enrich.chat to look up the work email for each person on this list of bounced contacts, using their LinkedIn URL or their name and company website. Show the status exactly as returned. Put verified in a send-first group, catch_all and unknown in a hold group, and not found in a skip group. Flag any address that matches the one that bounced, because it should stay suppressed. Never guess an address from a pattern.
```

Your agent gets 10 free lookups a day. After that, monthly plans start at $29 for 100,000 credits, as the [pricing page](https://enrich.chat/pricing/) shows. The [email finder API](https://enrich.chat/api/email-finder/) page covers the endpoint, the [install page](https://enrich.chat/install/) has steps for ChatGPT, Claude, Cursor and Codex, and the guide to [AI agents and contact data](https://enrich.chat/agents/) shows how an agent reads the API. The free [email finder](https://enrich.chat/tools/email-finder/) works in your browser, and the [email validation guide](https://enrich.chat/blog/email-validation/) covers what no check can prove.

## Frequently asked questions

### What is considered a hard bounce?

A hard bounce is a permanent delivery failure. The receiving server answers with a 5yz reply, such as 550 5.1.1 for an address that does not exist, and [RFC 5321](https://www.rfc-editor.org/rfc/rfc5321.html#section-4.2.1) says the sender should not repeat the exact request. Other causes are a domain that cannot receive mail or a permanent block of your mail. [Amazon SES](https://docs.aws.amazon.com/ses/latest/dg/notification-contents.html) says to remove the recipient from your lists immediately.

### Is a soft bounce bad?

Not by itself. A soft bounce is a temporary failure, such as a full mailbox, and the sending server retries on its own. [HubSpot](https://knowledge.hubspot.com/marketing-email/what-is-the-difference-between-a-hard-bounce-and-a-soft-bounce) retries for up to 72 hours. Repeats are the problem: [Klaviyo](https://help.klaviyo.com/hc/en-us/articles/360057036052-How-to-Decrease-Bounce-Rate) suppresses an address after more than 7 soft bounces in a row. A cluster from one provider can also mean you are sending too fast.

### How many soft bounces turn into a hard bounce?

There is no standard number. [Mailchimp](https://mailchimp.com/help/soft-vs-hard-bounces/) converts an address after 7 soft bounces when it has no activity, and after up to 15 when the contact was active before. Klaviyo suppresses after more than 7 in a row. [Amazon SES](https://docs.aws.amazon.com/ses/latest/dg/notification-contents.html) retries for a period its page does not state, then stops and reports the bounce. Check your platform's rule and write down your own limit.

### Does a 550 error always mean a hard bounce?

A 550 reply is permanent, but it does not always mean the person is gone. [RFC 5321](https://www.rfc-editor.org/rfc/rfc5321.html#section-4.2.2) defines 550 as mailbox unavailable, which covers a mailbox that is not found, access denied, or a policy refusal. [Google](https://knowledge.workspace.google.com/admin/support/troubleshooting/gmail-smtp-errors-and-codes) returns 550 5.7.1 for policy and reputation blocks. Read the enhanced status: 5.1.1 points at the address, 5.7.x at your own mail.

### How do you tell a hard bounce from a soft bounce in a bounce message?

Find the Status or error code. A first digit of 5 is a hard bounce and 4 is a soft bounce. In a delivery status notification, the Action field from [RFC 3464](https://www.rfc-editor.org/rfc/rfc3464.html) also says failed or delayed. Then read the rest: per [RFC 3463](https://www.rfc-editor.org/rfc/rfc3463.html), 5.1.1 means the mailbox address is bad and 4.2.2 means the mailbox is full. The Diagnostic-Code line holds the server's own text.

### Should you retry a hard bounce?

No, unless something changed. [Yahoo](https://senders.yahooinc.com/smtp-error-codes/) says not to retry an email that comes back with a 5xx error. [RFC 5321](https://www.rfc-editor.org/rfc/rfc5321.html#section-4.2.1) allows one exception: some permanent conditions can be corrected, for example after a typo is fixed or an account status changes. If the code points at your authentication or reputation, fix that first, then test with a single address.

## Sources

1. [RFC 5321: Simple Mail Transfer Protocol](https://www.rfc-editor.org/rfc/rfc5321.html)
2. [RFC 3463: Enhanced Mail System Status Codes](https://www.rfc-editor.org/rfc/rfc3463.html)
3. [RFC 3464: An Extensible Message Format for Delivery Status Notifications](https://www.rfc-editor.org/rfc/rfc3464.html)
4. [RFC 6647: Email Greylisting, an Applicability Statement for SMTP](https://www.rfc-editor.org/rfc/rfc6647.html)
5. [Gmail SMTP errors and codes](https://knowledge.workspace.google.com/admin/support/troubleshooting/gmail-smtp-errors-and-codes)
6. [Email sender guidelines](https://support.google.com/a/answer/81126)
7. [Sender best practices](https://senders.yahooinc.com/best-practices/)
8. [SMTP error codes](https://senders.yahooinc.com/smtp-error-codes/)
9. [Reputation metrics messages](https://docs.aws.amazon.com/ses/latest/dg/reputationdashboardmessages.html)
10. [Amazon SNS notification contents for Amazon SES](https://docs.aws.amazon.com/ses/latest/dg/notification-contents.html)
11. [Email nondelivery reports (NDRs) and SMTP errors in Exchange Online](https://learn.microsoft.com/en-us/troubleshoot/exchange/email-delivery/ndr/non-delivery-reports-in-exchange-online)
12. [Bounce API: bounce types](https://postmarkapp.com/developer/api/bounce-api)
13. [Email bounce types](https://knowledge.hubspot.com/marketing-email/what-is-the-difference-between-a-hard-bounce-and-a-soft-bounce)
14. [Email bounce management: soft bounces vs. hard bounces](https://www.twilio.com/en-us/blog/insights/email-bounce-management)
15. [Manage bounced messages](https://www.twilio.com/docs/sendgrid/ui/sending-email/bounces)
16. [Soft vs. Hard Bounces](https://mailchimp.com/help/soft-vs-hard-bounces/)
17. [Hard bounce vs. soft bounce](https://mailchimp.com/resources/hard-bounce-vs-soft-bounce/)
18. [How to decrease bounce rates](https://help.klaviyo.com/hc/en-us/articles/360057036052-How-to-Decrease-Bounce-Rate)
19. [Tracking failures](https://documentation.mailgun.com/docs/mailgun/user-manual/tracking-messages/tracking-failures)
20. [Postfix configuration parameters](https://www.postfix.org/postconf.5.html)
21. [What Are Accept-all Email Addresses, and How to Use Them](https://hunter.io/email-verification-guide/accept-all-catch-all/)
22. [Spamtraps: fix the problem, not the symptom](https://www.spamhaus.org/resource-hub/deliverability/spamtraps-fix-the-problem-not-the-symptom/)

## Try this prompt

Re-check bounced contacts before you resend

```text
Use www.enrich.chat to look up the work email for each person on this list of bounced contacts, using their LinkedIn URL or their name and company website. Show the status exactly as returned. Put verified in a send-first group, catch_all and unknown in a hold group, and not found in a skip group. Flag any address that matches the one that bounced, because it should stay suppressed. Never guess an address from a pattern.
```

## Related

- [Email bounce rate: what is good](https://enrich.chat/blog/email-bounce-rate/)
- [Email validation explained](https://enrich.chat/blog/email-validation/)
- [Catch-all email checker](https://enrich.chat/tools/catch-all-checker/)
