---
title: "Validate contact data in SmartReach.io"
url: "https://lookvalid.com/integrations/smartreach-io.md"
canonical_url: "https://lookvalid.com/integrations/smartreach-io"
last_updated: "2026-10-22"
type: "how-to"
summary: "Check each address before your script posts it to SmartReach.io and send the result with the prospect as a custom field."
related: ["https://lookvalid.com/integrations.md", "https://lookvalid.com/docs/api/email-domain-check.md", "https://lookvalid.com/docs/quickstart.md"]
---

# Validate contact data in SmartReach.io

Check each address before your script posts it to SmartReach.io and send the result with the prospect as a custom field.

SmartReach.io attaches prospects to campaigns by email address, so one prospect that carries a bad domain keeps sending from your mailboxes until it bounces. Because the API requires a custom column to exist before a value can be sent for it, a list that skips the check also has nowhere to record what was learned about each address.

## What LookValid checks

- [Email Domain Check](https://lookvalid.com/products/email-domain-check.md): Reports whether the domain behind a prospect address has mail servers and what its SPF and DMARC records say. It never contacts the mail server, so it cannot confirm that a mailbox exists. Marks throwaway domains, free providers and role addresses so they can go to a separate list. (1 credit per address checked)
- [Domain Authority](https://lookvalid.com/products/domain-authority.md): Gives a 0 to 100 link-graph score for a prospect company domain, with every input shown. Domains outside the open rank lists come back unscored, which is not proof of low authority. (10 credits per domain found in the rank data (an unranked domain is free))
- [Site Files Checker](https://lookvalid.com/products/site-files.md): Reads the robots.txt, sitemap and related files a company site publishes, which can show where its contact pages are before you scrape them. (2 credits per site checked (a site that cannot be reached is free))

## Connect it in four steps

1. Start by creating a LookValid account and an API key.
2. Put the key in the LOOKVALID_API_KEY environment variable of your script, and keep the SmartReach.io key, created in Settings then Integrations and sent in the X-API-KEY header, in a different variable.
3. Before each prospect post, call the function with the address: it posts to the email-domain-check endpoint, returns None when nothing was found and raises with the error code and fix if the API refuses.
4. Add the three columns to your SmartReach.io prospects page first, then send the returned values inside the custom_fields object of the prospect request.

a script that prepares each prospect before it posts to the SmartReach.io prospects endpoint The call is `POST https://YOUR_API_HOST/v1/email-domain-check`.

```python
import json
import os
import urllib.error
import urllib.request

API_URL = "https://YOUR_API_HOST/v1/email-domain-check"


def check_smartreach_prospect(value):
    request = urllib.request.Request(
        API_URL,
        data=json.dumps({
            "email": value,
        }).encode(),
        headers={
            "Authorization": "Bearer " + os.environ["LOOKVALID_API_KEY"],
            "Content-Type": "application/json",
        },
        method="POST",
    )
    try:
        with urllib.request.urlopen(request, timeout=30) as response:
            result = json.load(response)
    except urllib.error.HTTPError as error:
        failure = json.load(error)["error"]
        raise RuntimeError(failure["code"] + ": " + failure["fix"])
    if not result["found"]:
        return None
    return {
        "address_signal": result.get("data", {}).get("deliverability_signal"),
        "domain_has_mx": result.get("data", {}).get("has_mx"),
        "free_provider": result.get("data", {}).get("free_provider"),
    }
```

| Response field | Goes into |
| --- | --- |
| `data.deliverability_signal` | address_signal |
| `data.has_mx` | domain_has_mx |
| `data.free_provider` | free_provider |

## Without code

An automation platform with a generic HTTP request step can do the same without code. Add a step that sends the new prospect address to the email-domain-check endpoint with your key in a bearer header, then a step that posts the prospect to SmartReach.io with the returned values in custom fields. No dedicated app is required.

## Questions

### Does this use many credits?

One lookup per address, each drawing credits from your LookValid balance. See the pricing page for the amount.

### What if a custom column does not exist yet?

Create it on the SmartReach.io prospects page first. The API expects the column to exist before a value is sent for it.

### Where does the key go for the script?

In LOOKVALID_API_KEY, an environment variable of the machine or scheduler that runs it. The SmartReach.io key is a different value sent in its own header.

## Sources

- [SmartReach.io API documentation](https://smartreach.io/api_docs), read 2026-10-18

## Related

- [LookValid integrations](https://lookvalid.com/integrations.md)
- [Email Domain Check reference](https://lookvalid.com/docs/api/email-domain-check.md)
- [Quickstart](https://lookvalid.com/docs/quickstart.md)
