Prompt

Refresh stale CRM records before you reach out

Time to build: 1 min
Difficulty: Easy
Tools: ClaudeLusha

Stale CRM data is invisible until a touch fails. Paste a CRM export and Claude re-verifies every row against live data — still at the company, title still current, email still verified.

A Claude prompt that takes a list of CRM contacts and re-verifies each one against live data. It returns three things per record: whether the person is still at the company, whether their title still matches what’s in the CRM, and whether their phone and email are still verified. Anything that’s changed gets flagged with the corrected value. Anything that can’t be confirmed gets marked, not guessed.

B2B contact data decays fast — people change jobs, get promoted, leave. A list that was clean six months ago has records pointing at people who moved. Reps don’t find out until the call connects to a stranger or the email bounces, and by then the touch is spent and the sequence is poisoned. This prompt runs the decay check before the first touch, so the list a rep works is the list that’s actually true today.

Once Lusha is connected in Claude, the connector runs in the background — no special syntax needed. Paste the contacts and run.

If you are building the list rather than maintaining one, start with build a prospect list without wasting credits.

The example output below was pulled live via the Lusha connector. Contacts are real, masked to initials, with company names replaced by category descriptors. No emails or phone numbers are published.

The prompt

<context>
I'm about to work a list of CRM contacts. Before I do, I want to re-verify each one against live data: confirm the person is still at the company, the title still matches, and the phone and email are still good. I'd rather drop a stale record than burn a touch on it.

My list (paste from CRM export):
- Each row: [NAME, TITLE, COMPANY, EMAIL ON FILE, PHONE ON FILE, DATE RECORD LAST UPDATED]
</context>

<task>
For each contact, use Lusha to verify against live data:

1. Still at the company
   - Confirm the person is currently at the company on file
   - If they've left, flag it and surface where they are now if Lusha returns it

2. Title still current
   - Confirm the title on file matches their current title
   - If it changed (promotion, lateral move), return the current title

3. Contact details still verified
   - Confirm the email on file is a current verified work email; if stale, return the verified one
   - Flag whether the phone on file is still current, but don't reveal a corrected number unless I ask

4. Return a per-record status:
   - CURRENT: person, title, email all confirmed. Work this record as-is.
   - UPDATED: record corrected. Show exactly what changed (old -> new) so I can update the CRM.
   - DEPARTED: person has left. Drop from this list; surface the replacement contact if available.
   - UNVERIFIED: could not confirm. Flag it; don't guess.

5. End with a one-line summary: how many records are current, updated, departed, and unverified, so I know the real size of the list I'm working.
</task>

<constraints>
- Verify in preview mode. Reveal corrected emails only for rows where the address on file is stale.
- Confirm the company domain matches before trusting a match. A misspelled company name can match a different organisation.
- Each check is binary. The person is at the company or they aren't, the title matches or it doesn't. Don't soften with "likely still there."
- Show every correction as old -> new so the CRM update is a copy job, not a re-research job.
- Do not invent contacts, titles, emails, or phone numbers. Surface only what Lusha returns.
- A CURRENT record is safe to work today. An UNVERIFIED record is not. Keep them separate.
</constraints>

What you'll get back

Input: a 6-row CRM export pulled for an outbound push, last updated between 4 and 11 months ago. Contacts across enterprise SaaS: cloud data, cloud observability, and infrastructure software.

Output: of 6 records, 3 current, 2 updated, 1 departed. The push was about to go out against all six.

Refresh summary: 3 current · 2 updated · 1 departed · 0 unverified

One in three records on this list had decayed since the last update. A rep working the raw export would have hit a changed title on two calls and a dead seat on one — three of six touches degraded before dialing.

Per-record status

Contact (on file)CompanyStatusWhat changed
K.R., SVP Sales Americas[Cloud data platform]CURRENTPerson, title, email all confirmed
P.H., VP RevOps[Cloud data platform]CURRENTConfirmed; same role, same scope
D.R., VP AI Engineering[Cloud data platform]UPDATEDTitle now VP & Head of AI Engineering — email unchanged
M.L., Director of Sales Ops[Cloud observability]UPDATEDPromoted to Senior Director, Revenue Operations — verified email changed (old → new returned)
P.N., VP Marketing[Cloud observability]CURRENTPerson, title, email all confirmed
T.A., Head of Growth[Infrastructure software]DEPARTEDNo longer at the account — replacement in seat: E.K., Director of Growth (verified)

What this means for the push

Work today (3): K.R., P.H., P.N. — clean, no change.

Update CRM, then work (2): D.R. (title), M.L. (title + email). Both corrections returned as old → new — copy into the CRM and dial.

Drop and re-route (1): T.A. has left the infrastructure software account. Replacement E.K. surfaced and verified — add the new contact, retire the old record.

The real list is six rows; the workable list is five, and two of those need a CRM correction before the first touch. Running the raw export would have spent three touches learning what this check returned in 60 seconds.

What it cost: 1 credit. Contact search bills at 1 credit per batch of up to 25 records, so a 6-row refresh is a single batch. A 200-record list would be 8. Revealing a corrected email costs 1 credit per contact and only for rows that changed — on this run, one. Corrected phone numbers cost 5 each, so pull those only where someone is going to dial.

The cost scales with corrections, not with list size. That’s what makes a refresh before every push affordable rather than a quarterly project.

If a record comes back UNVERIFIED: check the company name on that row before treating it as a data gap. An abbreviated or misspelled company name can match a real but unrelated organisation and return a confident-looking result for the wrong company. Confirm the domain on the returned record matches the one you have.

Contacts verified live via Lusha connector, May 25, 2026. Names masked to initials, companies replaced with category descriptors.

Why use Lusha in Claude

Contact data doesn’t go stale on a schedule a rep can see. A record updated in January looks identical to one updated last week — same fields filled in, same confidence on the surface. The decay is invisible until the touch fails. This prompt makes the decay visible before the touch, which is the only point where finding it still saves the touch.

The check is binary on every field. The person is at the company or they aren’t. The title matches or it doesn’t. A real refresh doesn’t hedge with “probably moved on” — it confirms the record or returns the correction. Reps trust a list more when the unverifiable rows are pulled out and labeled, not quietly left in to fail later. Being clear about what couldn’t be confirmed is what makes the rest of the list workable.

The corrections come back as old → new, so updating the CRM is a copy job, not a second round of research. A title change isn’t just flagged — the current title is returned. A stale email isn’t just marked bad — the verified one replaces it. The prompt closes the loop it opens, which is the difference between a list that gets cleaned and a list that gets a to-do attached to it.

The departed-contact path is where a refresh earns its keep. A contact who left isn’t a dead end — it’s a routing problem with an answer. Lusha surfaces the replacement in seat, verified, so the record gets re-pointed instead of retired. The list doesn’t shrink by one; it gets corrected by one. That’s the gap between data that decays and data that stays callable.

Data drawn from 290M+ verified contacts, sourced and processed under GDPR, CCPA, SOC 2 Type II, ISO 27001, ISO 27701, and TRUSTe Responsible AI. Full detail in the Trust Center and privacy notice.


FAQ

How often should I refresh CRM contact records?

Tie it to the touch rather than the calendar. Any list about to be worked is worth a refresh regardless of when it was last updated, because decay isn’t visible from the record. As a baseline, contact-level records benefit from a quarterly pass, and anything older than six months should be treated as unverified until checked. Firmographics move slower and rarely need more than an annual refresh.

How many credits does refreshing a CRM list cost?

1 credit per batch of up to 25 records, so a 200-record refresh costs 8. Revealing a corrected email costs 1 credit per contact, and only for rows that actually changed. A corrected phone number costs 5. The cost scales with how much has decayed rather than with list size, which is why running it before every push is affordable.

What counts as stale enough to re-verify?

Anything you’re about to spend a touch on. The practical answer is that a record’s age tells you less than its role: a VP-level contact in a fast-growing company can decay in three months, while a mid-level contact at a stable one holds for two years. If the list is going into a sequence, verify it. If it’s going into a report, age matters less.

Does it update my CRM automatically?

No, and that’s deliberate. The prompt returns corrections as old → new so you can review before writing anything back. Automatic overwrites are how a bad match propagates into a system of record. If you want automation, run this first, confirm the corrections look right, then push through a connector or import.

What if Lusha can’t verify a record?

It returns UNVERIFIED rather than guessing. Treat that as a signal to check your input first — an abbreviated or misspelled company name can prevent a match, or worse, match a different organisation entirely. If the input is right and the result is still UNVERIFIED, keep the record out of the working list rather than sending to an unconfirmed address.

Is a departed contact a dead record?

No, it’s a routing problem with an answer. The prompt surfaces the replacement in seat where one is available, so the record gets re-pointed rather than retired. A departure is also a signal about the account: if the person who owned your relationship left, the rest of your records at that company are likely stale too, and re-mapping the account is more useful than patching one row.

How is this different from enriching a new list?

Enrichment adds fields you don’t have. A refresh checks fields you already have and corrects them. The distinction matters for cost: enrichment reveals contact details on records you’re seeing for the first time, while a refresh only pays to reveal what has actually changed. On a healthy list that’s a small fraction of the rows.

Ready to run this?

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