Fiber AI
Enrichment

Hashed Email Lookup

Turn SHA-256, MD5, or SHA-1 hashed emails (HEMs) back into the real address and the LinkedIn profile behind it — up to 100 per call, billed only on hits.

Hashed Email Lookup

Hashed emails (HEMs) are everywhere: pixel and visitor-identification feeds, clean rooms, ad-platform audiences, partner data shares. They tell you someone showed up, but not who. We built Hashed Email Lookup to close that gap. Send us the digests, and for every one we can resolve, you get back the original email address plus the person's LinkedIn profile URL and member ID.

You only pay for hashes that resolve. Misses and malformed inputs are free, so you can measure your match rate on a real sample before committing a full feed.

What it does

  1. You send up to 100 hashes in one request: SHA-256, MD5, or SHA-1, mixed freely. We tell them apart by length.
  2. We check each one against our contact data.
  3. You get one result per hash, in the order you sent them, each tagged found, not_found, or rejected.
  4. For each found hash you get the plaintext email, the LinkedIn URL, and the LinkedIn member ID when we have them linked.

One bad hash never fails the batch. If 99 hashes are valid and one has a typo, you get 99 lookups and one rejected result that explains what went wrong.

Inputs and outputs

You sendYou get back (per hash)
hashedEmails: 1–100 hex digests of lowercased, trimmed email addressesstatus: found, not_found, or rejected
hashedEmail: your input, exactly as sent, for joining back to your data
originalEmail: the address the hash resolves to (found only)
linkedinUrl and linkedinUserID: the person's LinkedIn identifiers, or null if we don't have them linked (found only)
message: why a hash missed or was rejected (not_found / rejected only)

Accepted formats:

AlgorithmHex length
SHA-25664 characters
SHA-140 characters
MD532 characters

Upper or lower case both work, and we trim surrounding whitespace for you.

curl -X POST https://api.fiber.ai/v1/email-to-person/hashed \
  -H "Content-Type: application/json" \
  -d '{
    "apiKey": "YOUR_API_KEY",
    "hashedEmails": [
      "86e0b9e56c17cc4d12387e1949b85053fbe73bc3ce5a1188713a9d300cc6133d",
      "1bc5edb4799fd8eec67c66122f47eb73"
    ]
  }'
{
  "output": {
    "data": [
      {
        "status": "found",
        "hashedEmail": "86e0b9e56c17cc4d12387e1949b85053fbe73bc3ce5a1188713a9d300cc6133d",
        "originalEmail": "jane.doe@example.com",
        "linkedinUrl": "https://www.linkedin.com/in/jane-doe",
        "linkedinUserID": "123456789"
      },
      {
        "status": "not_found",
        "hashedEmail": "1bc5edb4799fd8eec67c66122f47eb73",
        "message": "..."
      }
    ]
  },
  "chargeInfo": { "method": "charged-now", "creditsCharged": 2 }
}

The response is HTTP 200 even when some hashes miss, so check each item's status rather than the status code. The full schema is linked from the table below.

Operation

OperationWhat it doesReference
Hashed email lookupResolves up to 100 SHA-256 / MD5 / SHA-1 hashed emails to the original address and LinkedIn identifiershemLookup

Using it effectively

  • Hash the way everyone else does: lowercase, trim, then hash. The digest has to come from the lowercased, trimmed address. Jane.Doe@Example.com and jane.doe@example.com produce completely different hashes, and only the second one will match. This is the most common reason for an unexpectedly low match rate:

    printf '%s' 'jane.doe@example.com' | shasum -a 256
    # 86e0b9e56c17cc4d12387e1949b85053fbe73bc3ce5a1188713a9d300cc6133d
  • Send hex, not base64. Some platforms export digests in base64. We reject those rather than guess, because a wrong guess turns a valid hash into a silent miss. Convert to hex on your side first.

  • Watch for the empty-string hash. When an upstream pipeline hashes a blank field, you get a real-looking digest of "". We flag it as rejected with a specific message, so you know your pipeline produced junk rather than that we lack the person.

  • Fill every request. Batch 100 hashes per call. The limit is 600 requests per minute, so a full pipeline can clear up to 60,000 hashes a minute. Pace requests evenly rather than bursting to avoid HTTP 429s.

  • Test with a sample first. Because misses are free, run a few thousand representative hashes, count the found results, and you have your match rate for the cost of the hits alone.

Want the full profile, not just the identifiers? Hashed Email Lookup returns the address and LinkedIn IDs. Feed the resolved email into Reverse Email Lookup for name, headline, company, and location, or into the Kitchen Sink resolver if you have other signals too.

Use cases

  • Website visitor de-anonymization. Your identity pixel or visitor-ID vendor hands you hashed emails. Resolve them to real people and LinkedIn profiles so sales can follow up on high-intent visits.
  • Clean-room and partner data. A partner shares an audience as hashes for privacy. Resolve the overlap to people you can actually route and enrich.
  • Ad-audience reconciliation. Match hashed audience lists from ad platforms back to contacts in your CRM and see who's in them.
  • Match-rate evaluation. Score a data vendor or a new traffic source by how many of its hashes resolve, before you sign anything.

Cost

2 credits per resolved hash. Misses, rejected inputs, and empty-string hashes cost nothing. A batch of 100 where 40 resolve costs 80 credits. Your org's pricing may differ; the chargeInfo in each response is authoritative. See Billing & credits for the credit model.

Related: Reverse Email Lookup · Contact Reveal · Kitchen Sink

On this page