What’s on this page:
Key takeaways
- Define the target market by specialty, geography, and setting before collecting records.
- Use NPI as the primary deduplication key where available, with license state and number as a secondary match and uncertain matches routed for manual review.
- Keep contact fields separate and record their source and last-verified date.
- Centralize ownership, merge logs, and suppression so recruiters can coordinate outreach and honor opt-outs.
- Refresh the map weekly by importing updates, deduplicating, reviewing stale contact details, applying suppression, and logging outreach outcomes.
Last updated: August 31, 2026
Ben Argeband, Founder & CEO of Heartbeat.ai — a practical walkthrough of what to put in a physician market-mapping sheet and how to run it week over week.
Who this is for
This guide is for recruiters building a physician target market list for recurring hiring—a map that must work across multiple requisitions, recruiters, and refresh cycles.
Physician recruiting has three recurring data challenges: public sources can identify physicians but may not provide usable contact details, duplicates can accumulate when several recruiters work the same market, and contact data can become stale.
Quick answer
- Core answer
- Build a physician market map from public identifiers, dedupe by NPI or license number, enrich the records missing usable contact info, then run a repeatable outreach sequence with weekly refresh and suppression built in.
- Planning note
- Physician placements typically require a meaningful volume of outreach attempts, so size your cohort with that in mind rather than assuming a short list will get you to a hire.
- Best for
- Recruiters building a physician target market list for recurring hiring.
Compliance & safety
This method is for legitimate recruiting outreach only. Respect candidate privacy, opt-out requests, and applicable data and communications laws. Nothing here is medical or legal advice.
The map, enrich, sequence workflow
The workflow has three parts: map physicians using stable identifiers, enrich records with reachability data, and sequence outreach while updating the map with outcomes.
- Map: start with public sources to capture NPI and license fields, plus specialty and location.
- Enrich: add mobile, direct, and email fields, along with provenance and last-verified dates.
- Sequence: run consistent outreach, log outcomes, and feed suppression and updates back into the map.
Dedupe by NPI or license before enrichment and outreach. Merging after outreach starts can waste attempts and lead to duplicate contact with candidates.
Where market mapping pays back fastest
- New req launch: stand up a cohort quickly because the identifier spine already exists.
- Recurring quarterly hiring: reuse the same cohort and refresh what decayed instead of rebuilding from scratch.
- Facility expansion: clone the schema, adjust the boundary, and keep dedupe rules consistent across markets.
- Team recruiting: prevent duplicate outreach with cohort ownership, suppression, and a merge log.
Step-by-step method
Step 1: Define the market boundary
Before collecting data, define the market boundary in one sentence:
- Specialty scope: which physician specialty or specialties this req cycle targets.
- Geography: the area you can realistically hire into.
- Setting: hospital-employed, private practice, or academic — this changes the contact path.
Create a cohort label that captures the boundary, for example: Specialty | Market | Setting | Wave.
Step 2: Build the identifier spine from public sources
Government sources can provide stable identifiers and a source trail. For physicians, NPI is a useful identifier; it is maintained through the federal NPPES registry.
- Pull NPI records for your boundary and capture the fields you’ll use for matching and refresh.
- Where available, capture license number, state, and license status from state verification sources.
At this stage, focus on building an identifier backbone that can support merges and weekly refreshes—not on finding the best phone number.
Step 3: Add practice signals without making them your primary key
Professional networking profiles can provide supporting signals about specialty focus, current organization, and location, but should not be the basis for deduplication.
- Capture profile URL, current org, and location as supporting signals.
- If a practice-signal source conflicts with NPI or license data, treat NPI/license as the anchor and flag the conflict for manual review.
Step 4: Normalize names and organizations
Normalize the fields that cause false duplicates:
- Name: split into first, middle, last, suffix; keep a separate display_name if needed.
- Organization: store org_raw and org_normalized, stripping punctuation and standardizing abbreviations.
- Location: store city, state, ZIP, and a separate market field matching your boundary definition.
Step 5: Dedupe using NPI and license matching rules
Document deduplication rules so recruiters apply them consistently:
- Primary key: NPI, exact match.
- Secondary key: license number plus state, exact match, used when NPI is missing or ambiguous.
- Manual review bucket: name, city, specialty, and org matches only — never auto-merge on these alone.
A dedupe event occurs when rows representing the same physician are merged into one canonical record while preserving source references. License matching can help when sources do not provide NPI consistently.
Step 6: Enrich for reachability and track provenance
Once the identifier spine is clean, enrich records with contact details for outreach. Teams may use public sources and practice-signal platforms for mapping, then use a separate enrichment step to fill missing contact fields.
- Add separate fields for mobile, direct line, office line, and email.
- Store contact_source and contact_last_verified_date so refresh decisions are based on evidence, not guesswork.
- Maintain a suppression flag for opt-outs and do-not-contact requests.
Re-enrich a record when:
- An email bounces.
- A call outcome comes back as wrong number or disconnected.
- The contact_last_verified_date is older than your team’s refresh cadence allows.
The goal is to reduce dead dials and bounced emails and make submittals more efficient. If a provider offers ranked mobile numbers, that may help teams prioritize calls; the core process remains separating contact fields, tracking provenance, and refreshing records when needed.
Step 7: Sequence outreach and feed outcomes back into the map
Treat the map as a maintained system, not a static export: use outreach outcomes to update suppression, verification dates, and next-touch routing.
- Run a consistent outreach sequence — call, email, follow-up.
- Log outcomes: connected, wrong number, voicemail, bounce, reply, opt-out.
- Update the map by replacing bad contacts, suppressing opt-outs, and tagging reached versus not reached.
The trade-off is real: you spend more time upfront on structure, but you stop paying a rebuild tax every time a new req opens.
Step 8: Assign ownership and suppression governance
In multi-recruiter teams, unclear ownership can undermine market mapping. Put governance rules directly into the sheet:
- Single owner per cohort: every row has an owner for the current wave, even if ownership rotates next wave.
- Central suppression: opt-outs and do-not-contact requests live in the master map, not personal notes.
- Merge log: simple merged_by and merged_date fields are enough to keep dedupe auditable.
Team handoffs
- Recruiting ops or lead recruiter: owns dedupe rules, merge conflicts, and the weekly dedupe run.
- Each recruiter: owns outcome logging — wrong number, bounce, reply, opt-out — and keeps notes minimal.
- Cohort owner: owns suppression enforcement and decides when to refresh enrichment for that cohort.
Diagnostic table
Use this to figure out why your current map isn’t producing reachable candidates fast enough.
| Symptom | Likely cause | Fix in the map | Fix in the workflow |
|---|---|---|---|
| High wrong-number rate on calls | Office main lines stored as the primary phone field | Separate mobile vs direct vs office; store provenance and last-verified date | Prioritize mobile/direct; route office lines to a gatekeeper script |
| Low answer rate | Calling at the wrong times or relying on office lines | Tag preferred call windows when learned; keep office lines separate from mobile/direct | Shift call windows by cohort; prioritize mobile/direct before office lines |
| Duplicates across recruiters | No canonical key; inconsistent name formatting | Make NPI the primary key; add license matching as secondary | Centralize the master sheet; enforce merge rules and a merge log |
| Email bounces rise over time | List decay; no suppression or refresh routine | Add bounce flag, last sent date, last delivered date | Weekly refresh and suppression before each send |
| Low coverage in a cohort | Boundary too tight, missing identifiers, or inconsistent suppression | Audit NPI/license fields, expand boundary if needed, separate suppressed from not-yet-enriched | Re-pull identifiers from public sources, re-run dedupe, enrich missing channels before sequencing |
Weighted checklist
Score market-map readiness before launching outreach. This internal rubric totals 100 points; the suggested under-70 threshold is a team rule of thumb, not a universal standard.
- (25) NPI present and validated for most rows in scope (set your own threshold by cohort and track it weekly).
- (15) License matching fields present — state, number, and status where available.
- (15) Dedupe rules documented and followed: NPI first, license second, manual review third.
- (10) Merge log maintained with merged_by, merged_date, merge_reason.
- (15) Contact fields separated into mobile/direct/office/email with source and last-verified date.
- (10) Suppression fields exist: opt-out, do-not-contact, wrong specialty, retired/moved.
- (10) Cohort definition is set and used for assignment and reporting.
A cohort is a labeled subset of the map used for routing and measurement — for example, Hospitalist | Metro North | Employed | Wave 1. Cohorts need to stay consistent enough to compare week over week.
Outreach templates
These are built for physician recruiting realities: short windows, gatekeepers, low tolerance for fluff. Customize the bracketed fields and keep the first touch short.
Template 1: Direct-to-physician voicemail (mobile)
“Hi Dr. [Last], this is [Name]. I’m recruiting for a [Specialty] opening with [Org] near [City]. If you’re open to a quick, confidential chat, call or text me at [Number]. If not, reply ‘no’ and I’ll suppress future outreach. Thanks.”
Template 2: Gatekeeper call opener (office line)
“Hi—can you help me reach Dr. [Last]? This is recruiting outreach about a [Specialty] opportunity. What’s the best number or time window to reach them directly?”
Template 3: Email (first touch)
Subject: [Specialty] near [City] — quick question
“Dr. [Last] — I’m recruiting for a [Specialty] position with [Org] near [City]. Are you open to a brief call this week, or should I close the loop? If you prefer text, reply with a number and I’ll keep it short.”
Template 4: Email follow-up with specifics
Subject: Re: [Specialty] near [City]
“Following up once. I can send comp range, call schedule, and clinic mix in one message. If you’re not interested, reply ‘no’ and I’ll suppress future outreach.”
Common pitfalls
Pitfall 1: Treating a list like a market map
A list is a one-time export; a market map is a maintained dataset with identifiers, provenance, and outcomes. To run it weekly, track where each contact came from and when it was last verified.
Pitfall 2: Deduping after outreach starts
If two recruiters contact the same physician because deduplication by NPI or license was skipped, you can waste attempts and risk damaging trust. Resolve duplicates before the first outreach.
Pitfall 3: No suppression discipline
Centralize suppression for opt-outs, wrong specialty, retired, or moved records. Keeping these decisions in personal notes can lead to repeat contact in later hiring cycles.
Pitfall 4: A sheet that can’t survive weekly refresh
Most teams fail here because the schema itself breaks under refresh. Use a canonical column set that supports mapping from public sources, then enrichment, then sequencing, without breaking dedupe.
Copy/paste market map columns: physician_id, npi, license_state, license_number, first_name, last_name, specialty_primary, city, state, org_raw, org_normalized, profile_url, phone_mobile, phone_direct, phone_office, email_primary, contact_source, contact_last_verified_date, cohort, owner, status, suppression_reason, merged_by, merged_date, merge_reason, last_touch_date, notes.
| Column | Type | Required? | Notes / rules |
|---|---|---|---|
| physician_id | string | Yes | Internal stable ID — do not change once assigned. Generate once on first import. |
| npi | string | Preferred | Primary dedupe key. Exact match only. |
| license_state | string | Preferred | Used with license_number for secondary dedupe. |
| license_number | string | Preferred | Secondary dedupe key with license_state. |
| specialty_primary | string | Yes | Use a controlled list for reporting consistency. |
| org_normalized | string | No | Lowercase, strip punctuation, standardize abbreviations. |
| contact_source | string | No | e.g., public source, practice-signal platform, enrichment provider. |
| contact_last_verified_date | date | No | Update whenever you confirm deliverability or a connection. |
| cohort | string | Yes | Used for routing and measurement. |
| suppression_reason | string | No | opt_out, wrong_specialty, retired, moved, do_not_contact, duplicate. |
How to improve results
Improve results by working on both reachability data and routing and cadence decisions; focusing on only one may limit progress.
Define the metrics
- Deliverability rate = delivered emails / sent emails, per 100 sent.
- Bounce rate = bounced emails / sent emails, per 100 sent.
- Connect rate = connected calls / total dials, per 100 dials.
- Answer rate = human answers / connected calls, per 100 connected calls.
- Reply rate = replies / delivered emails, per 100 delivered.
Coverage is the percent of physicians identifiable within your market boundary who exist in your map with a valid identifier match (NPI and/or license) and at least one usable, non-suppressed outreach path.
Weekly refresh routine
- Import updates from public sources — new NPIs, address changes — plus internal notes affecting suppression.
- Run dedupe using NPI and license matching rules; merge while preserving provenance.
- Refresh enrichment for records missing mobile/direct/email or with stale verification dates.
- Apply suppression before any outreach — opt-outs, do-not-contact, wrong specialty.
- Re-cohort if the req boundary changed — new facility, new radius, new specialty mix.
- Launch the sequence and log outcomes back into the map the same day where possible.
Measurement plan
Run a cohort-based weekly report covering:
- Map size (rows after dedupe) by cohort.
- Coverage by cohort, split into phone-available, email-available, both.
- Suppression rate = suppressed records / total records, per 100, by cohort.
- Outreach outcomes using the deliverability, bounce, connect, answer, and reply definitions above.
- Speed to first reach: median days from new to reached status, by cohort.
If/then actions when metrics drift
| If you see… | It usually means… | Do this next |
|---|---|---|
| Bounce rate rising | Decay or bad domains in the cohort | Suppress bounces, refresh enrichment for that cohort, re-send only to delivered addresses |
| Low connect rate | You’re dialing office lines or stale numbers | Prioritize mobile/direct fields, move office lines to a gatekeeper workflow, refresh phones flagged wrong-number |
| Good deliverability but low reply rate | Message isn’t specific enough to the role | Add call schedule, setting, and location specifics to follow-up; tighten the ask to one question |
| Suppression rate climbing | You’re re-touching the same market without respecting prior outcomes | Audit suppression reasons, enforce centralized suppression, rotate cohorts instead of blasting the full map |
Size the cohort around expected outreach attempts per placement. If too few records remain after deduplication and suppression, the team may run short of reachable candidates before reaching its submittal goals.
Legal and ethical use
Market mapping is legitimate when it supports lawful recruiting outreach and respects candidate preferences.
- Use data from public sources and reputable providers, and document sources in your sheet.
- Honor opt-out requests quickly and permanently — suppression should be centralized.
- Follow applicable privacy and communications laws for your jurisdiction and the candidate’s location.
- Don’t store sensitive personal data you don’t need to recruit — keep notes minimal and job-relevant.
- Keep suppression reasons standardized so they’re auditable and consistently applied.
- Don’t represent your map as complete or guarantee completeness — list decay is real and ongoing.
Evidence and trust notes
For an auditable map, anchor matching and deduplication to NPI where available and retain a source trail. NPI helps identify records; it does not establish that a physician is reachable.
- NPI reference sources: NPPES NPI Registry and CMS NPI overview.
- For how Heartbeat.ai evaluates data quality and trust, see our trust methodology.
FAQs
What is market mapping in physician recruiting?
It is the process of building and maintaining a structured dataset of physicians in a defined boundary (specialty + geography), anchored by NPI/license, then adding reachability fields for outreach.
Where should I start building a physician market map?
Start with government sites for identifiers (NPI and license where available), then use Doximity and web sources for practice signals, and finally add enrichment for phones/emails.
How do I dedupe a physician market map correctly?
Dedupe by NPI first (exact match). If NPI is missing or inconsistent, use license matching (license state + license number). Put name/org-only matches into a manual review bucket.
How big should my market map be?
Big enough to support your outreach reality after dedupe and suppression. Plan cohort size around expected outreach attempts per placement, not around how many names you can export.
How do I keep the map fresh without rebuilding it?
Run a weekly refresh routine: import identifier updates, dedupe, refresh enrichment for missing or stale contacts, apply suppression, then sequence outreach and log outcomes back into the map.
Next steps
- If you need a starting dataset, see physician list by specialty and state and adapt it to the CSV schema above.
- If your issue is missing phones or emails, read physician contact enrichment for what to enrich and how to track provenance.
- If you’re merging multiple sources, use NPI and license matching to tighten dedupe and reduce duplicate outreach.
- When you’re ready to operationalize this, start free search & preview data and build your first cohort with enrichment and suppression from day one.
About the Author
Ben Argeband is the Founder and CEO of Swordfish.ai and Heartbeat.ai. With deep expertise in data and SaaS, he has built two successful platforms trusted by over 50,000 sales and recruitment professionals. Ben’s mission is to help teams find direct contact information for hard-to-reach professionals and decision-makers, providing the shortest route to their next win. Connect with Ben on LinkedIn.