---
name: cross-channel-identity-graph
description: Use this skill when the user needs to connect B2B LinkedIn identities to device-level advertising IDs (MAIDs) or personal hashed emails for omnichannel targeting, retargeting, or identity graph enrichment.
---

# Cross-Channel Identity Graph

Map LinkedIn profiles to personal hashed emails and mobile advertising IDs (MAIDs).

## Triggers

"get MAIDs for these LinkedIn profiles", "build an identity graph", "match LinkedIn to device IDs", "connect B2B profiles to ad targeting", "get hashed emails and MAIDs for retargeting", "cross-channel identity resolution", "audience matching". For AdTech, programmatic advertising, and data partnerships.

## Chain

```
LinkedIn URL(s)
  → linkedin_to_hashed_emails        (LinkedIn → personal MD5 hashes)
  → hem_to_maid                      (MD5 → MAIDs / device IDs)    ─┐ parallel
  → hem_to_email                     (MD5 → plaintext email, opt.) ─┘
  → linkedin_to_best_personal_email  (LinkedIn → best personal email, optional)
```

## Use cases

- Upload MAIDs to DSP/DMP for programmatic audience targeting
- Match B2B profiles to mobile devices for cross-device campaigns
- Build SHA-256 hashed audience lists for Custom Audiences (Meta, Google)
- Identity resolution for data clean rooms

## Set Expectations

Before firing any calls, give the user a brief, dry heads-up. Deadpan over enthusiastic — no filler, no corporate speak.

Facts to work with:
- 3 sequential rounds: LinkedIn → hashed emails → MAIDs (each round feeds the next)
- Single profile: ~15–30 seconds
- Batch: 30–90+ seconds depending on match rates at each step
- Match rates drop at each round — convey this without being dramatic about it

## Step 1 — Credit check (required)

Call `MoltSets:get_billing` (free). This chain costs 2–4 credits per profile on full hits.

Expected match rates:
- HEMs found: ~50–70% of LinkedIn profiles
- MAIDs from HEM: ~30–60%

"Not found" is free. Estimate conservatively.

**If estimated cost > balance:** stop, report, ask to proceed partially or top up.

## Step 2 — Detect singular vs. batch

**Singular:** `linkedin_slug` / `linkedin_url` + `md5`
**Batch:** `linkedin_slugs` / `linkedin_urls` arrays + `md5s` array (max 100 each)

## Step 3 — Get hashed emails

Call `MoltSets:linkedin_to_hashed_emails` with LinkedIn URL(s).

Each profile may return multiple MD5 hashes (one per known associated email).

## Step 4 — Resolve MAIDs (+ optional plaintext email, parallel)

Collect all unique MD5s from Step 3.

Run in parallel:
- `MoltSets:hem_to_maid` with `md5s` array
- `MoltSets:hem_to_email` with `md5s` array (if user needs plaintext emails)
- OR `MoltSets:linkedin_to_best_personal_email` with `linkedin_slugs` (alternative for personal email)

## Step 5 — Output

| LinkedIn URL | MD5 Hash | MAID(s) | Personal Email |
|---|---|---|---|

**Summary:**
```
Profiles processed:  X
HEMs resolved:       X  (XX%)
MAIDs found:         X  (XX%)
Personal emails:     X  (XX%)
Credits used:        ~XXX
```

## Edge cases

- Multiple MAIDs per MD5 (multi-device) → include all in output; note IDFA vs GAID type if returned
- Multiple MD5s per LinkedIn profile → run MAID lookup for each, deduplicate MAIDs in final output
- Privacy compliance: user is responsible for lawful use of MAIDs and hashed PII under GDPR, CCPA, and platform policies
- Do not log or persist raw personal identifiers beyond the session
