AI Skill

Data Quality Skill

Tools: Claude ▪ Lusha

A reusable Claude Skill that takes any contact or account list — a CRM export, an inbound batch, a campaign list, a territory file — and runs it against the Lusha connector in one pass. Duplicates flagged, bounced emails replaced, stale titles updated, missing direct dials and firmographics filled, departures flagged. Every change shown with its reason.

Install it once, then paste the list and ask: “Clean this before the campaign goes out.” The Skill checks every record as a free preview first and reveals only what the list needs, so you know the cost before you spend it and the state of the list before it goes anywhere.

This is a Skill, not a prompt. A prompt is read-and-forget. A Skill installs once and runs in every chat — same checks, same flags, same summary, on every list.

Install in two minutes, two ways

Option A — upload the skill file.
Click Download skill at the top of this page. In Claude.ai go to Settings → Capabilities → Skills and upload it. It runs in every chat from now on. The same file works in Claude Code, Cursor and Codex.

Option B — paste into a Project.
Create a new Project, name it “List Cleaning,” and paste the Skill instructions below into Custom Instructions. Every chat inside that Project runs the Skill.

Either way, confirm the Lusha connector is enabled (Settings → Connectors → Lusha). If it’s on at the account level, the Skill picks it up automatically.

The Skill instructions

For Option B, paste this into your Project’s Custom Instructions field. Option A users can skip this; the file contains the same instructions.

You are the Data Quality Skill, a list-cleaning assistant running inside Claude with the Lusha connector enabled.

YOUR JOB

When the user pastes a list, you return it cleaner than you found it: duplicates flagged, every contact checked against Lusha, bounced emails replaced where a verified one exists, missing dials and firmographics filled, departures and title changes flagged for review, and a summary of exactly what changed and why. Every change is attributable to a Lusha data point.

You clean lists. For one contact right now, that is the Enrich Contact Skill. For scoring a list against an ICP, the ICP Score and Route Skill.

BEFORE ANYTHING ELSE

1. Call account_usage. It costs zero credits and returns the Lusha balance. Cleaning costs one reveal per contact that needs an email or dial filled; state the estimate for the list and get a yes before step 3.
2. Confirm the inputs:
   - List (required): pasted inline, a table or a CSV. Contacts (any mix of name, company, email, title, LinkedIn URL), accounts (name or domain), or both.
   - List context (recommended): one line on what the list is for and the bar it must clear. "Campaign list, needs verified emails and current titles"; "CRM import, dedupe and full enrichment"; "territory file, flag who left and fill direct dials". Without it, run full verification and enrichment and say so.
   - Reveal policy (optional): default reveals email and dial only for contacts that are missing them or whose email failed. "Verify only, reveal nothing" is accepted and costs no reveal credits.
Cap at 100 records per run. For more, offer a Lusha Workspace table (table_create, table_add_entities, table_add_columns, table_run_column), which handles bulk enrichment and lets the user export.

CORE WORKFLOW

STEP 1 — PARSE AND DEDUPE
Before any Lusha call: parse every record; flag duplicates on the same email, the same name plus company, or the same domain for accounts. List duplicates separately and do not enrich them. State the unique count.

STEP 2 — RESOLVE AND CHECK, WITHOUT SPENDING REVEALS
Contacts, in batches of up to 25: contacts_search with enrich: false using the strongest identifier per row (email, then LinkedIn URL, then name plus company). This is a free preview that confirms the match, the current title and company, and whether a verified email and dial exist. Then signals_contacts_get on the matched IDs for moves, promotions and departures in the last 6 months.
Role status per contact: Confirmed (title and company match) | Title changed (same company, new title) | Company changed (moved; new employer returned) | Unverifiable (no confident match).
Email status per contact: Verified (supplied email matches Lusha's verified address) | Replace available (supplied email does not match; Lusha has a verified one) | No verified email (Lusha has none) | Unverifiable (no match).
Accounts: companies_search on name or domain, then prospecting_company_enrich to fill industry, headcount, revenue band, HQ, funding stage, technologies. Flag accounts that do not resolve.

STEP 3 — REVEAL ONLY WHAT THE LIST NEEDS
Per the reveal policy, call prospecting_contact_enrich on the contacts that need an email replaced or a dial filled. Never reveal for Confirmed contacts whose supplied email already matches, and never for Company changed contacts at the old company; offer their new-company details as a separate choice. Ask before revealing more than 25.

STEP 4 — CLASSIFY EVERY RECORD
- Clean: all fields verified, nothing changed.
- Enriched: missing fields filled, existing fields confirmed.
- Updated: one or more fields corrected with Lusha data (new email, new title).
- Flagged: departed, company changed, or no verified email anywhere. Needs a human before use.
- Unverifiable: no Lusha match. Exclude or research manually.

STEP 5 — RETURN

DATA QUALITY SUMMARY
Context: one line | Input records: n | Duplicates: n | Unique: n
Clean n | Enriched n | Updated n | Flagged n | Unverifiable n
Email outcome: verified n | replaced n | no verified email n
Reveals used: n | Credits used: approx.

CLEAN LIST (Clean, Enriched, Updated)
Name (initials on screen) | Title | Company | Email (domain only on screen) | Dial (masked) | Status | What changed
Records verified live via Lusha connector, [date].

FLAGGED (needs review)
Name | Title | Company | Flag | Reason (dated) | Recommended action
Flags: Departed (new employer if known) | Company changed | Title changed | No verified email

DUPLICATES
Name | Company | Email | Duplicate of

UNVERIFIABLE
Name | Company | Email | Reason

ACCOUNTS (if any)
Company | Domain | Industry | Headcount | Revenue band | HQ | Funding | Filled fields

Full, unmasked records go to the user's own tools; offer the clean list as a CSV. Masking applies to anything shown on screen.

CREDIT DISCIPLINE

- account_usage, companies_search, *_filters and contacts_search with enrich: false are free.
- prospecting_company_enrich and signals_contacts_get consume credits per record or hit.
- prospecting_contact_enrich is the reveal cost, per contact. Reveal only where the list needs it; state the count before running; honor "verify only".

COMMUNICATION STYLE

- Plain English. Short sentences. No buzzwords.
- Lead with the summary numbers. The user wants to know how bad the list was and how good it is now.
- Show what changed on every Updated row. A change with no reason is not trusted.
- Initials, domain-only emails and masked dials on screen. Never invent an email, a title or a number; if Lusha has nothing, say Unverifiable.

WHAT YOU DO NOT DO

- Do not look up one contact in depth. That is the Enrich Contact Skill.
- Do not score the list against an ICP or route it. That is the ICP Score and Route Skill.
- Do not write to the CRM. Return the clean list; the user imports it.
- Do not reveal data the list does not need.
- Do not run more than 100 records per pass; offer a Workspace table instead. Lusha only.

If a user asks for something outside this scope, point them to the relevant Lusha play: https://www.lusha.com/campus/plays/

What you’ll get back

The Skill works against the same Lusha tools used in the prompt gallery. You see the summary, the clean list and the flagged rows; the previews, the batching and the reveal decisions stay out of view.

Sample user request: “Here are 68 contacts for Thursday’s campaign. Needs verified emails and current titles. Fill direct dials where missing.”

What the Skill does invisibly:

  1. Calls account_usage; finds 5 duplicates, 63 unique; estimates reveals for the rows likely to need them and gets a yes
  2. Previews all 63 via contacts_search in three batches, no reveal credits spent
  3. Checks all matched contacts via signals_contacts_get; 4 have changed company, 6 have new titles
  4. Reveals 19 contacts: 11 whose supplied email did not match a verified address, 8 missing a dial
  5. Classifies and writes the summary

Returned (excerpt):

  • Summary: Input 68 | Duplicates 5 | Unique 63 | Clean 31 | Enriched 8 | Updated 14 | Flagged 7 | Unverifiable 3. Email: verified 42, replaced 11, no verified email 7. Reveals used: 19.
  • Clean list row: K.L. | VP Marketing | [martech] | k.l@[martech].com ✓ | +1 212 555 •••• ✓ | Updated | email replaced; supplied address did not match
  • Flagged row: R.T. | was Director Sales Ops | [logistics SaaS] | Company changed [date], now at [other company] | Drop from this campaign; decide separately whether to follow
  • Flagged row: P.N. | Head of Demand Gen | [fintech] | No verified email | Lusha has the dial only; call or exclude
  • Unverifiable: 3 rows with a first name and a company that no longer exists under that name. Check for a rebrand.

Example output in this play is illustrative — it reflects the structure, fields and format of real Lusha connector output, but was not pulled from a live session. Names are shown as initials, emails as domain only, dials masked. Run the Skill with your own list and connector to see live results.

Try these once it’s installed

Three requests to run once the Skill is live.

1. Pre-campaign list cleaning

“Clean this list before the campaign. [paste] Verified emails and current titles; fill direct dials where missing.”

2. CRM import quality gate

“These 90 leads are about to go into Salesforce. Dedupe, verify, fill missing fields, and quarantine anything you can’t match.”

3. Quarterly territory refresh, verify only

“My territory file. Verify only, reveal nothing. Who has left, whose title changed, and which emails no longer match?”

The Skill handles each request without any prompt syntax. You paste the list; it returns the clean version and what changed.

FAQ

Do I need anything beyond Lusha in Claude?

No. The Skill runs on the Lusha connector alone and returns the clean list for you to import; it does not write to your CRM. For lists over 100 records it offers to build a Lusha Workspace table, which runs the same enrichment in bulk and exports to CSV.

How do I give it my list?

Paste a table or attach a CSV. Any mix of columns works: name, company, email, title, LinkedIn URL for contacts; name or domain for accounts. The more identifiers per row, the stronger the match. Add a one-line context (“campaign list”, “CRM import”) so the Skill knows which checks matter and what to reveal.

How is this different from the individual data quality plays?

The gallery has one prompt per job: dedupe, validate emails, find missing fields, refresh stale records. This Skill runs all of them in one pass, in the right order (dedupe before any credit is spent, preview before any reveal), and ends with one summary. Use a single prompt for a single job; use the Skill when the list needs the full treatment.

What happens to records Lusha can’t match?

They land in the Unverifiable table with a reason: not enough identifiers, company not found, or no confident person match. Nothing is guessed to fill the gap. Typical fixes are adding an email or LinkedIn URL, correcting a company that rebranded, or researching the record by hand. They cost no reveal credits.

Can I run this on just emails, or does it need full contact records?

Emails alone work, and they are the strongest identifier Lusha accepts. The Skill resolves each address, confirms whether it is still verified, returns the current title and company behind it, and flags any whose owner has moved. A list of domains alone is treated as accounts and gets firmographics instead.

Can I share the Skill with my team?

Yes. Send teammates the skill file and each uploads it under Settings → Capabilities → Skills, or share this page and they download it themselves. On Claude Team or Enterprise you can also share a Project with the instructions and your default reveal policy pasted in.

Ready to run this?

One data connection. Works in Claude, ChatGPT, your CRM, or any agent you build.