{"id":54323,"date":"2026-02-01T13:00:14","date_gmt":"2026-02-01T19:00:14","guid":{"rendered":"https:\/\/heartbeat.ai\/healthcare\/how-to-build-a-physician-call-list\/"},"modified":"2026-02-27T13:34:55","modified_gmt":"2026-02-27T19:34:55","slug":"how-to-build-a-physician-call-list","status":"publish","type":"post","link":"http:\/\/heartbeat.ai\/resources\/provider-contact-data\/how-to-build-a-physician-call-list\/","title":{"rendered":"How to Build a Physician Call List (CSV Template, Dedupe, Validate, Route)"},"content":{"rendered":"<p><img decoding=\"async\" loading=\"false\" class=\"aligncenter\" src=\"http:\/\/hc.heartbeat.ai\/wp-content\/webp-express\/webp-images\/uploads\/2026\/02\/how-to-build-a-physician-call-list-4ac9e7b9.png.webp\" alt=\"54322\" \/><\/p>\n<h1>How to build a physician call list<\/h1>\n<p><strong>By Ben Argeband, Founder &amp; CEO of Heartbeat.ai<\/strong> \u2014 Simple: \u201ccolumns, order, what to do when it fails.\u201d<\/p>\n<div id=\"ez-toc-container\" class=\"ez-toc-v2_0_82_2 counter-hierarchy ez-toc-counter ez-toc-custom ez-toc-container-direction\">\r\n<div class=\"ez-toc-title-container\">\r\n<p class=\"ez-toc-title\" style=\"cursor:inherit\">What\u2019s on this page:<\/p>\r\n<span class=\"ez-toc-title-toggle\"><\/span><\/div>\r\n<nav><ul class='ez-toc-list ez-toc-list-level-1' ><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-1\" href=\"http:\/\/heartbeat.ai\/resources\/provider-contact-data\/how-to-build-a-physician-call-list\/#Who_this_is_for\" >Who this is for<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-2\" href=\"http:\/\/heartbeat.ai\/resources\/provider-contact-data\/how-to-build-a-physician-call-list\/#Quick_Answer\" >Quick Answer<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-3\" href=\"http:\/\/heartbeat.ai\/resources\/provider-contact-data\/how-to-build-a-physician-call-list\/#Framework_The_Call_List_Build_System_Dedupe_%E2%86%92_Validate_%E2%86%92_Rank_%E2%86%92_Route_%E2%86%92_Track\" >Framework: The Call List Build System: Dedupe \u2192 Validate \u2192 Rank \u2192 Route \u2192 Track<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-4\" href=\"http:\/\/heartbeat.ai\/resources\/provider-contact-data\/how-to-build-a-physician-call-list\/#Step-by-step_method\" >Step-by-step method<\/a><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-5\" href=\"http:\/\/heartbeat.ai\/resources\/provider-contact-data\/how-to-build-a-physician-call-list\/#Step_1_Define_the_lists_job_so_%E2%80%9Cdone%E2%80%9D_is_measurable\" >Step 1) Define the list\u2019s job (so \u201cdone\u201d is measurable)<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-6\" href=\"http:\/\/heartbeat.ai\/resources\/provider-contact-data\/how-to-build-a-physician-call-list\/#Step_2_Start_from_a_strict_CSV_template_so_ops_can_enforce_hygiene\" >Step 2) Start from a strict CSV template (so ops can enforce hygiene)<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-7\" href=\"http:\/\/heartbeat.ai\/resources\/provider-contact-data\/how-to-build-a-physician-call-list\/#Step_3_Dedupe_using_stable_identifiers_NPIlicense_not_names\" >Step 3) Dedupe using stable identifiers (NPI\/license), not names<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-8\" href=\"http:\/\/heartbeat.ai\/resources\/provider-contact-data\/how-to-build-a-physician-call-list\/#Step_4_Validate_phones_before_they_hit_a_dial_block\" >Step 4) Validate phones before they hit a dial block<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-9\" href=\"http:\/\/heartbeat.ai\/resources\/provider-contact-data\/how-to-build-a-physician-call-list\/#Step_5_Route_by_line_type_so_you_dont_burn_time_on_the_wrong_path\" >Step 5) Route by line type (so you don\u2019t burn time on the wrong path)<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-10\" href=\"http:\/\/heartbeat.ai\/resources\/provider-contact-data\/how-to-build-a-physician-call-list\/#Step_6_Rank_the_queue_so_the_first_hour_produces_the_most_connects\" >Step 6) Rank the queue so the first hour produces the most connects<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-11\" href=\"http:\/\/heartbeat.ai\/resources\/provider-contact-data\/how-to-build-a-physician-call-list\/#Step_7_Track_outcomes_with_a_call_block_tracker_so_ops_can_fix_the_list\" >Step 7) Track outcomes with a call block tracker (so ops can fix the list)<\/a><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-12\" href=\"http:\/\/heartbeat.ai\/resources\/provider-contact-data\/how-to-build-a-physician-call-list\/#Diagnostic_Table\" >Diagnostic Table:<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-13\" href=\"http:\/\/heartbeat.ai\/resources\/provider-contact-data\/how-to-build-a-physician-call-list\/#Weighted_Checklist\" >Weighted Checklist:<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-14\" href=\"http:\/\/heartbeat.ai\/resources\/provider-contact-data\/how-to-build-a-physician-call-list\/#Outreach_Templates\" >Outreach Templates:<\/a><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-15\" href=\"http:\/\/heartbeat.ai\/resources\/provider-contact-data\/how-to-build-a-physician-call-list\/#Template_1_Mobile_first-touch_identity_permission\" >Template 1: Mobile first-touch (identity + permission)<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-16\" href=\"http:\/\/heartbeat.ai\/resources\/provider-contact-data\/how-to-build-a-physician-call-list\/#Template_2_Office_line_gatekeeper-respectful\" >Template 2: Office line (gatekeeper-respectful)<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-17\" href=\"http:\/\/heartbeat.ai\/resources\/provider-contact-data\/how-to-build-a-physician-call-list\/#Template_3_Voicemail_low_detail_clear_callback_opt-out\" >Template 3: Voicemail (low detail, clear callback + opt-out)<\/a><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-18\" href=\"http:\/\/heartbeat.ai\/resources\/provider-contact-data\/how-to-build-a-physician-call-list\/#Common_pitfalls\" >Common pitfalls<\/a><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-19\" href=\"http:\/\/heartbeat.ai\/resources\/provider-contact-data\/how-to-build-a-physician-call-list\/#1_Treating_%E2%80%9Cmore_rows%E2%80%9D_as_progress\" >1) Treating \u201cmore rows\u201d as progress<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-20\" href=\"http:\/\/heartbeat.ai\/resources\/provider-contact-data\/how-to-build-a-physician-call-list\/#2_No_stable_dedupe_key\" >2) No stable dedupe key<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-21\" href=\"http:\/\/heartbeat.ai\/resources\/provider-contact-data\/how-to-build-a-physician-call-list\/#3_Mixing_line_types_in_the_same_block_without_routing_rules\" >3) Mixing line types in the same block without routing rules<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-22\" href=\"http:\/\/heartbeat.ai\/resources\/provider-contact-data\/how-to-build-a-physician-call-list\/#4_Not_refreshing_after_%E2%80%9Cno-answer_clusters%E2%80%9D\" >4) Not refreshing after \u201cno-answer clusters\u201d<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-23\" href=\"http:\/\/heartbeat.ai\/resources\/provider-contact-data\/how-to-build-a-physician-call-list\/#5_CSV_TEMPLATE_mistake_uniqueness_hook\" >5) CSV_TEMPLATE mistake (uniqueness hook)<\/a><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-24\" href=\"http:\/\/heartbeat.ai\/resources\/provider-contact-data\/how-to-build-a-physician-call-list\/#How_to_improve_results\" >How to improve results<\/a><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-25\" href=\"http:\/\/heartbeat.ai\/resources\/provider-contact-data\/how-to-build-a-physician-call-list\/#Build_a_measurement_loop_ops_can_act_on\" >Build a measurement loop ops can act on<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-26\" href=\"http:\/\/heartbeat.ai\/resources\/provider-contact-data\/how-to-build-a-physician-call-list\/#Refresh_triggers_instead_of_fixed_schedules\" >Refresh triggers (instead of fixed schedules)<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-27\" href=\"http:\/\/heartbeat.ai\/resources\/provider-contact-data\/how-to-build-a-physician-call-list\/#Suppression_and_consent_handling\" >Suppression and consent handling<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-28\" href=\"http:\/\/heartbeat.ai\/resources\/provider-contact-data\/how-to-build-a-physician-call-list\/#Make_it_easy_to_start_and_hard_to_break\" >Make it easy to start and hard to break<\/a><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-29\" href=\"http:\/\/heartbeat.ai\/resources\/provider-contact-data\/how-to-build-a-physician-call-list\/#Legal_and_ethical_use\" >Legal and ethical use<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-30\" href=\"http:\/\/heartbeat.ai\/resources\/provider-contact-data\/how-to-build-a-physician-call-list\/#Evidence_and_trust_notes\" >Evidence and trust notes<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-31\" href=\"http:\/\/heartbeat.ai\/resources\/provider-contact-data\/how-to-build-a-physician-call-list\/#FAQs\" >FAQs<\/a><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-32\" href=\"http:\/\/heartbeat.ai\/resources\/provider-contact-data\/how-to-build-a-physician-call-list\/#What_columns_do_I_need_to_build_a_physician_call_list_that_recruiters_will_actually_use\" >What columns do I need to build a physician call list that recruiters will actually use?<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-33\" href=\"http:\/\/heartbeat.ai\/resources\/provider-contact-data\/how-to-build-a-physician-call-list\/#How_do_I_dedupe_physicians_across_multiple_sources_without_losing_good_numbers\" >How do I dedupe physicians across multiple sources without losing good numbers?<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-34\" href=\"http:\/\/heartbeat.ai\/resources\/provider-contact-data\/how-to-build-a-physician-call-list\/#How_often_should_I_refresh_phone_validation\" >How often should I refresh phone validation?<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-35\" href=\"http:\/\/heartbeat.ai\/resources\/provider-contact-data\/how-to-build-a-physician-call-list\/#Should_I_dial_office_lines_and_mobile_numbers_in_the_same_block\" >Should I dial office lines and mobile numbers in the same block?<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-36\" href=\"http:\/\/heartbeat.ai\/resources\/provider-contact-data\/how-to-build-a-physician-call-list\/#Whats_the_fastest_way_to_get_a_list_into_Heartbeatai\" >What\u2019s the fastest way to get a list into Heartbeat.ai?<\/a><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-37\" href=\"http:\/\/heartbeat.ai\/resources\/provider-contact-data\/how-to-build-a-physician-call-list\/#Next_steps\" >Next steps<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-38\" href=\"http:\/\/heartbeat.ai\/resources\/provider-contact-data\/how-to-build-a-physician-call-list\/#About_the_Author\" >About the Author<\/a><\/li><\/ul><\/nav><\/div>\r\n<h2><span class=\"ez-toc-section\" id=\"Who_this_is_for\"><\/span>Who this is for<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>Recruiters and ops building physician call lists who are tired of dead numbers, duplicates, and wrong-person calls. If you care about speed-to-submittal, connectability, and clean tracking, this is the workflow.<\/p>\n<h2><span class=\"ez-toc-section\" id=\"Quick_Answer\"><\/span>Quick Answer<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<dl>\n<dt>Core Answer<\/dt>\n<dd>To build a physician call list, standardize a CSV, dedupe by NPI\/license, validate phones, route by line type, then track call blocks and refresh after no-answer clusters (same source + same phone_validation_date cohort producing repeated no_answer outcomes).<\/dd>\n<dt>Key Statistic<\/dt>\n<dd><strong>Heartbeat observed typicals (internal):<\/strong> Connect Rate varies widely by line type and list hygiene; use consistent call blocks to benchmark your own baseline and improve it.<\/dd>\n<dt>Best For<\/dt>\n<dd>Recruiters and ops building physician call lists tired of dead numbers\/duplicates.<\/dd>\n<\/dl>\n<blockquote>\n<p><strong>Compliance &amp; Safety<\/strong><\/p>\n<p>This method is for legitimate recruiting outreach only. Always respect candidate privacy, opt-out requests, and local data laws. Heartbeat does not provide medical advice or legal counsel.<\/p>\n<\/blockquote>\n<h2><span class=\"ez-toc-section\" id=\"Framework_The_Call_List_Build_System_Dedupe_%E2%86%92_Validate_%E2%86%92_Rank_%E2%86%92_Route_%E2%86%92_Track\"><\/span>Framework: The Call List Build System: Dedupe \u2192 Validate \u2192 Rank \u2192 Route \u2192 Track<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>A physician <strong>call list<\/strong> isn\u2019t a database export. It\u2019s a working queue designed to produce connects and qualified conversations without burning goodwill.<\/p>\n<ul>\n<li><strong>Dedupe<\/strong>: collapse the same physician across sources using stable identifiers (NPI\/license) so you don\u2019t call the same person twice.<\/li>\n<li><strong>Validate<\/strong>: run phone validation so you stop feeding disconnected\/invalid numbers into your dial blocks.<\/li>\n<li><strong>Rank<\/strong>: prioritize the best numbers first. Heartbeat.ai supports <strong>ranked mobile numbers by answer probability<\/strong>.<\/li>\n<li><strong>Route<\/strong>: decide what to dial first based on <strong>line type<\/strong> (mobile vs direct dial vs office line) and your compliance posture.<\/li>\n<li><strong>Track<\/strong>: log outcomes in a call block tracker so you can refresh intelligently after no-answer clusters.<\/li>\n<\/ul>\n<p><strong>TL;DR workflow<\/strong><\/p>\n<ul>\n<li>Start with a strict CSV header (below) so every row is dial-ready.<\/li>\n<li>Dedupe by NPI\/license, not by name.<\/li>\n<li>Validate phones, then route by line type.<\/li>\n<li>Dial in call blocks, then refresh the slices that decay.<\/li>\n<\/ul>\n<h2><span class=\"ez-toc-section\" id=\"Step-by-step_method\"><\/span>Step-by-step method<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<h3><span class=\"ez-toc-section\" id=\"Step_1_Define_the_lists_job_so_%E2%80%9Cdone%E2%80%9D_is_measurable\"><\/span>Step 1) Define the list\u2019s job (so \u201cdone\u201d is measurable)<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>Before you build anything, define what the list is supposed to do:<\/p>\n<ul>\n<li><strong>Use case<\/strong>: first-touch sourcing, reactivation, credentialing follow-up, or interview scheduling.<\/li>\n<li><strong>Owner<\/strong>: who updates outcomes (recruiter) vs who maintains hygiene (ops).<\/li>\n<li><strong>Cadence rule<\/strong>: how many attempts per number before you pause and refresh validation or switch numbers.<\/li>\n<\/ul>\n<p>Call list quality beats size: reducing duplicates and wrong-person calls usually improves throughput faster than adding more rows.<\/p>\n<h3><span class=\"ez-toc-section\" id=\"Step_2_Start_from_a_strict_CSV_template_so_ops_can_enforce_hygiene\"><\/span>Step 2) Start from a strict CSV template (so ops can enforce hygiene)<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>Use one <strong>CSV template<\/strong> across the team. If you don\u2019t, you can\u2019t dedupe, route, or measure consistently.<\/p>\n<p><strong>Copy\/paste CSV header line (recommended order)<\/strong><\/p>\n<p>physician_full_name,npi,license_state,license_number,specialty,practice_name,phone_number,line_type,phone_validation_status,phone_validation_date,source,priority_score,owner,call_block_id,attempt_count,last_call_outcome,last_call_date,opt_out_status,notes<\/p>\n<p><strong>CSV header reference table<\/strong><\/p>\n<div class=\"table-scroll\" style=\"overflow:auto;-webkit-overflow-scrolling:touch;width:100%\">\n<table class=\"separated-content\">\n<thead>\n<tr>\n<th>Column<\/th>\n<th>Purpose<\/th>\n<th>Required?<\/th>\n<th>Notes \/ allowed values<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>physician_full_name<\/td>\n<td>Human-readable identity<\/td>\n<td>Yes<\/td>\n<td>As displayed in outreach<\/td>\n<\/tr>\n<tr>\n<td>npi<\/td>\n<td>Primary dedupe key<\/td>\n<td>Strongly recommended<\/td>\n<td>10-digit NPI<\/td>\n<\/tr>\n<tr>\n<td>license_state<\/td>\n<td>Dedupe + compliance context<\/td>\n<td>Recommended<\/td>\n<td>Two-letter state code<\/td>\n<\/tr>\n<tr>\n<td>license_number<\/td>\n<td>Secondary dedupe key<\/td>\n<td>Recommended<\/td>\n<td>As provided by source<\/td>\n<\/tr>\n<tr>\n<td>specialty<\/td>\n<td>Routing + messaging<\/td>\n<td>Recommended<\/td>\n<td>Normalize to your taxonomy<\/td>\n<\/tr>\n<tr>\n<td>practice_name<\/td>\n<td>Context for office lines<\/td>\n<td>Optional<\/td>\n<td>Useful for gatekeeper calls<\/td>\n<\/tr>\n<tr>\n<td>phone_number<\/td>\n<td>Dial target<\/td>\n<td>Yes<\/td>\n<td>E.164 preferred (+1XXXXXXXXXX)<\/td>\n<\/tr>\n<tr>\n<td>line_type<\/td>\n<td>Routing decision<\/td>\n<td>Yes<\/td>\n<td>mobile | direct_dial | office | unknown<\/td>\n<\/tr>\n<tr>\n<td>phone_validation_status<\/td>\n<td>Hygiene gate<\/td>\n<td>Yes<\/td>\n<td>valid | invalid | unknown<\/td>\n<\/tr>\n<tr>\n<td>phone_validation_date<\/td>\n<td>Recency<\/td>\n<td>Recommended<\/td>\n<td>YYYY-MM-DD<\/td>\n<\/tr>\n<tr>\n<td>source<\/td>\n<td>Traceability<\/td>\n<td>Yes<\/td>\n<td>Where the row came from<\/td>\n<\/tr>\n<tr>\n<td>priority_score<\/td>\n<td>Rank order<\/td>\n<td>Recommended<\/td>\n<td>Pick one system: 0\u2013100 or A\/B\/C<\/td>\n<\/tr>\n<tr>\n<td>owner<\/td>\n<td>Assignment<\/td>\n<td>Recommended<\/td>\n<td>Recruiter name or email<\/td>\n<\/tr>\n<tr>\n<td>call_block_id<\/td>\n<td>Batch tracking<\/td>\n<td>Yes<\/td>\n<td>Example: Week1-AM-Mobile-SourceA<\/td>\n<\/tr>\n<tr>\n<td>attempt_count<\/td>\n<td>Cadence control<\/td>\n<td>Yes<\/td>\n<td>Integer<\/td>\n<\/tr>\n<tr>\n<td>last_call_outcome<\/td>\n<td>Next action<\/td>\n<td>Yes<\/td>\n<td>no_answer | voicemail | gatekeeper | wrong_person | connected | do_not_contact<\/td>\n<\/tr>\n<tr>\n<td>last_call_date<\/td>\n<td>Recency<\/td>\n<td>Yes<\/td>\n<td>YYYY-MM-DD<\/td>\n<\/tr>\n<tr>\n<td>opt_out_status<\/td>\n<td>Suppression<\/td>\n<td>Yes<\/td>\n<td>active | opted_out<\/td>\n<\/tr>\n<tr>\n<td>notes<\/td>\n<td>Human context<\/td>\n<td>Optional<\/td>\n<td>Keep short; no sensitive data<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<p>If you want a faster import path, use <a href=\"https:\/\/heartbeat.ai\/upload-file\">upload a CSV to map physician contacts<\/a> and keep the same header going forward.<\/p>\n<h3><span class=\"ez-toc-section\" id=\"Step_3_Dedupe_using_stable_identifiers_NPIlicense_not_names\"><\/span>Step 3) Dedupe using stable identifiers (NPI\/license), not names<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>Names collide and practices change. Your dedupe keys should be stable:<\/p>\n<ul>\n<li><strong>Primary key<\/strong>: <strong>NPI<\/strong> (best for collapsing multiple sources into one physician record).<\/li>\n<li><strong>Secondary key<\/strong>: license_state + license_number (useful when NPI is missing or inconsistent).<\/li>\n<\/ul>\n<p>Operationally: create a physician_id in your system that is either the NPI or a deterministic ID built from license_state+license_number when NPI is absent. If you need help matching identifiers, see <a href=\"http:\/\/heartbeat.ai\/resources\/provider-contact-data\/npi-license-matching\/\">NPI and license matching for dedupe<\/a>.<\/p>\n<ul>\n<li><strong>Precedence rule<\/strong>: when NPI is present and passes your checks, treat NPI as the primary identity key.<\/li>\n<li><strong>Conflict rule<\/strong>: if NPI and license disagree for the same physician_full_name, quarantine the row for review and do not dial until resolved.<\/li>\n<\/ul>\n<p>The trade-off is\u2026 strict dedupe will reduce your row count, but it increases recruiter trust because you stop double-tapping the same physician across different sources and numbers.<\/p>\n<h3><span class=\"ez-toc-section\" id=\"Step_4_Validate_phones_before_they_hit_a_dial_block\"><\/span>Step 4) Validate phones before they hit a dial block<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>Phone numbers are volatile. If you don\u2019t validate, you\u2019ll waste blocks on disconnected\/invalid numbers and inflate no_answer noise. Run <strong>phone validation<\/strong> and store both status and date so you can enforce recency.<\/p>\n<ul>\n<li><strong>Gate rule<\/strong>: only dial numbers with phone_validation_status = valid (or explicitly allow unknown for a controlled test block).<\/li>\n<li><strong>Refresh rule<\/strong>: if a block shows clustered no_answer outcomes, refresh validation before you keep retrying the same stale slice.<\/li>\n<\/ul>\n<p>Implementation detail: validation is a workflow step, not a one-time enrichment. See <a href=\"http:\/\/heartbeat.ai\/resources\/data-quality-verification\/phone-validation-for-provider-direct-dials\/\">phone validation for provider direct dials<\/a>.<\/p>\n<h3><span class=\"ez-toc-section\" id=\"Step_5_Route_by_line_type_so_you_dont_burn_time_on_the_wrong_path\"><\/span>Step 5) Route by line type (so you don\u2019t burn time on the wrong path)<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>Not all numbers behave the same. Your list needs a <strong>line type<\/strong> field and a routing rule. If you mix office lines with mobile in the same workflow, your connect expectations and scripts will drift.<\/p>\n<p>Align definitions using <a href=\"http:\/\/heartbeat.ai\/resources\/provider-contact-data\/office-line-vs-direct-dial-vs-mobile\/\">office line vs direct dial vs mobile<\/a>.<\/p>\n<ul>\n<li><strong>Handling unknown<\/strong>: route unknown line_type into a separate test call block until it\u2019s classified.<\/li>\n<\/ul>\n<div class=\"table-scroll\" style=\"overflow:auto;-webkit-overflow-scrolling:touch;width:100%\">\n<table class=\"separated-content\">\n<thead>\n<tr>\n<th>Line type<\/th>\n<th>Dial goal<\/th>\n<th>Best window<\/th>\n<th>Recommended opener<\/th>\n<th>When to switch\/refresh<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>mobile<\/td>\n<td>Direct connect with physician<\/td>\n<td>Short windows; avoid obvious clinic rush<\/td>\n<td>Permission-based: \u201cOkay time for a 20-second question?\u201d<\/td>\n<td>If repeated no_answer in the same source + phone_validation_date cohort, refresh validation or try alternate number<\/td>\n<\/tr>\n<tr>\n<td>direct_dial<\/td>\n<td>Physician or close assistant<\/td>\n<td>Business hours<\/td>\n<td>Professional: identity + reason + quick ask<\/td>\n<td>If wrong_person, audit mapping and dedupe keys<\/td>\n<\/tr>\n<tr>\n<td>office<\/td>\n<td>Best callback path (not a full pitch)<\/td>\n<td>Office hours<\/td>\n<td>Gatekeeper-respectful: \u201cbest direct path for a brief message?\u201d<\/td>\n<td>If gatekeeper-heavy, separate into its own call block and adjust script<\/td>\n<\/tr>\n<tr>\n<td>unknown<\/td>\n<td>Classify the number<\/td>\n<td>Controlled test block<\/td>\n<td>Short identity check<\/td>\n<td>After first outcome, set line_type and route accordingly<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<h3><span class=\"ez-toc-section\" id=\"Step_6_Rank_the_queue_so_the_first_hour_produces_the_most_connects\"><\/span>Step 6) Rank the queue so the first hour produces the most connects<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>Ranking is where speed-to-submittal shows up. Don\u2019t randomize. Rank by:<\/p>\n<ul>\n<li><strong>line_type<\/strong> (mobile \u2192 direct_dial \u2192 office \u2192 unknown)<\/li>\n<li><strong>validation recency<\/strong> (newer first)<\/li>\n<li><strong>prior outcomes<\/strong> (connected &gt; voicemail &gt; no_answer)<\/li>\n<li><strong>time-of-day fit<\/strong> (office lines during office hours; keep mobile attempts tight and respectful)<\/li>\n<\/ul>\n<h3><span class=\"ez-toc-section\" id=\"Step_7_Track_outcomes_with_a_call_block_tracker_so_ops_can_fix_the_list\"><\/span>Step 7) Track outcomes with a call block tracker (so ops can fix the list)<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>You need a batch concept so you can diagnose list issues quickly. That\u2019s what a <strong>call block<\/strong> is.<\/p>\n<p><strong>Metric definitions (use these consistently)<\/strong><\/p>\n<ul>\n<li><strong>Connect Rate<\/strong> = connected calls \/ total dials (report per 100 dials).<\/li>\n<li><strong>Call block<\/strong> = a defined batch of dials (a time window + a specific list slice) used to track outcomes and compare performance across sources, line types, and validation recency.<\/li>\n<\/ul>\n<p>Minimum tracking fields per dial attempt:<\/p>\n<ul>\n<li>call_block_id<\/li>\n<li>dial_timestamp<\/li>\n<li>phone_number<\/li>\n<li>line_type<\/li>\n<li>outcome (connected \/ voicemail \/ no_answer \/ wrong_person \/ gatekeeper \/ do_not_contact)<\/li>\n<li>next_action (retry, switch number, refresh validation, suppress)<\/li>\n<\/ul>\n<h2><span class=\"ez-toc-section\" id=\"Diagnostic_Table\"><\/span>Diagnostic Table:<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<div class=\"table-scroll\" style=\"overflow:auto;-webkit-overflow-scrolling:touch;width:100%\">\n<table class=\"separated-content\">\n<thead>\n<tr>\n<th>Symptom in your call block<\/th>\n<th>Likely root cause<\/th>\n<th>Fast test<\/th>\n<th>Fix in the list<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>High wrong_person outcomes<\/td>\n<td>Bad dedupe; mismatched physician-to-number mapping<\/td>\n<td>Sample rows; verify NPI + name + practice alignment<\/td>\n<td>Enforce NPI\/license dedupe; store source and last_verified fields<\/td>\n<\/tr>\n<tr>\n<td>Lots of no_answer clustered in one source slice<\/td>\n<td>Stale phones; validation recency too old<\/td>\n<td>Re-validate that slice; compare outcomes before\/after<\/td>\n<td>Require phone_validation_date; refresh after no-answer clusters<\/td>\n<\/tr>\n<tr>\n<td>Gatekeeper-heavy blocks<\/td>\n<td>Too many office lines routed as primary<\/td>\n<td>Split block by line_type; compare Connect Rate per 100 dials<\/td>\n<td>Route mobile\/direct_dial first; office lines in separate blocks<\/td>\n<\/tr>\n<tr>\n<td>Recruiters cherry-pick and ignore the queue<\/td>\n<td>Ranking not trusted or not explainable<\/td>\n<td>Ask: \u201cWhy is row #1 first?\u201d If no one can answer, it fails<\/td>\n<td>Make priority_score rules explicit; include validation recency and outcomes<\/td>\n<\/tr>\n<tr>\n<td>Duplicate calls to same physician across recruiters<\/td>\n<td>No shared physician_id; no ownership\/locking<\/td>\n<td>Find same NPI appearing in multiple owners in the same week<\/td>\n<td>Add physician_id + owner + last_call_date; enforce assignment rules<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<h2><span class=\"ez-toc-section\" id=\"Weighted_Checklist\"><\/span>Weighted Checklist:<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>Use this to decide whether a list is dial-ready. Score each item 0\u20132 (0 = missing, 1 = partial, 2 = solid). Multiply by weight, then total.<\/p>\n<div class=\"table-scroll\" style=\"overflow:auto;-webkit-overflow-scrolling:touch;width:100%\">\n<table class=\"separated-content\">\n<thead>\n<tr>\n<th>Item<\/th>\n<th>Weight<\/th>\n<th>What \u201c2 points\u201d looks like<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>Dedupe keys present (NPI and\/or license)<\/td>\n<td>5<\/td>\n<td>Most rows have NPI or license_state+license_number; duplicates collapsed<\/td>\n<\/tr>\n<tr>\n<td>Phone validation fields present<\/td>\n<td>5<\/td>\n<td>phone_validation_status + phone_validation_date populated; invalid suppressed<\/td>\n<\/tr>\n<tr>\n<td>Line type populated<\/td>\n<td>4<\/td>\n<td>mobile\/direct_dial\/office\/unknown filled; routing rules documented<\/td>\n<\/tr>\n<tr>\n<td>Suppression ready (opt-out)<\/td>\n<td>5<\/td>\n<td>opt_out_status enforced; do_not_contact outcomes immediately suppress<\/td>\n<\/tr>\n<tr>\n<td>Call block tracking fields<\/td>\n<td>4<\/td>\n<td>call_block_id, attempt_count, last_call_outcome, last_call_date required<\/td>\n<\/tr>\n<tr>\n<td>Source traceability<\/td>\n<td>3<\/td>\n<td>source field standardized so ops can isolate bad feeds<\/td>\n<\/tr>\n<tr>\n<td>Ranking logic documented<\/td>\n<td>3<\/td>\n<td>priority_score rules are explainable and consistent across owners<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<h2><span class=\"ez-toc-section\" id=\"Outreach_Templates\"><\/span>Outreach Templates:<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>Phone-first openers designed for physician recruiting. Keep them short, confirm identity, and offer an easy opt-out.<\/p>\n<h3><span class=\"ez-toc-section\" id=\"Template_1_Mobile_first-touch_identity_permission\"><\/span>Template 1: Mobile first-touch (identity + permission)<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p><strong>Opener:<\/strong> \u201cHi Dr. [Last Name]\u2014this is [Name]. Quick check: did I catch you at an okay time for a 20-second question?\u201d<\/p>\n<p><strong>If yes:<\/strong> \u201cI recruit physicians for [Organization\/Client]. Are you open to hearing about roles, or would you prefer I don\u2019t reach out again?\u201d<\/p>\n<p><strong>If no:<\/strong> \u201cNo problem\u2014what\u2019s a better time, or should I email instead?\u201d<\/p>\n<h3><span class=\"ez-toc-section\" id=\"Template_2_Office_line_gatekeeper-respectful\"><\/span>Template 2: Office line (gatekeeper-respectful)<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>\u201cHi\u2014can you help me reach Dr. [Last Name]? I\u2019m calling about a professional opportunity. What\u2019s the best direct path for a brief message\u2014direct line, voicemail, or email?\u201d<\/p>\n<h3><span class=\"ez-toc-section\" id=\"Template_3_Voicemail_low_detail_clear_callback_opt-out\"><\/span>Template 3: Voicemail (low detail, clear callback + opt-out)<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>\u201cDr. [Last Name], this is [Name] at [Company]. I\u2019m calling about a physician opportunity. If you\u2019d like details, call me at [Number]. If you prefer I don\u2019t contact you again, tell me and I\u2019ll opt you out.\u201d<\/p>\n<h2><span class=\"ez-toc-section\" id=\"Common_pitfalls\"><\/span>Common pitfalls<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<h3><span class=\"ez-toc-section\" id=\"1_Treating_%E2%80%9Cmore_rows%E2%80%9D_as_progress\"><\/span>1) Treating \u201cmore rows\u201d as progress<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>Big lists feel productive until your team spends the week dialing duplicates and wrong-person numbers. Quality beats size: dedupe and validation usually move outcomes faster than adding volume.<\/p>\n<h3><span class=\"ez-toc-section\" id=\"2_No_stable_dedupe_key\"><\/span>2) No stable dedupe key<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>If you dedupe on name + city, you will double-call physicians and miss merges. Use NPI\/license matching as the backbone, then keep names as display fields.<\/p>\n<h3><span class=\"ez-toc-section\" id=\"3_Mixing_line_types_in_the_same_block_without_routing_rules\"><\/span>3) Mixing line types in the same block without routing rules<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>Office lines and mobile behave differently. If you blend them, your Connect Rate per 100 dials becomes hard to interpret, and recruiters lose trust in the queue.<\/p>\n<h3><span class=\"ez-toc-section\" id=\"4_Not_refreshing_after_%E2%80%9Cno-answer_clusters%E2%80%9D\"><\/span>4) Not refreshing after \u201cno-answer clusters\u201d<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>When a slice of the list produces repeated no_answer outcomes, don\u2019t just increase attempts. Refresh validation and\/or swap to a different number for that physician. Phone numbers decay; your process has to assume it.<\/p>\n<h3><span class=\"ez-toc-section\" id=\"5_CSV_TEMPLATE_mistake_uniqueness_hook\"><\/span>5) CSV_TEMPLATE mistake (uniqueness hook)<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p><strong>Common mistake I see:<\/strong> teams build a CSV where each row is \u201ca phone number,\u201d not \u201ca physician contact attempt.\u201d Then they can\u2019t dedupe, can\u2019t suppress correctly, and can\u2019t route by line type. Fix it by making the CSV physician-centric (NPI\/license + physician_id) and treating phone_number as an attribute with validation and line type.<\/p>\n<h2><span class=\"ez-toc-section\" id=\"How_to_improve_results\"><\/span>How to improve results<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<h3><span class=\"ez-toc-section\" id=\"Build_a_measurement_loop_ops_can_act_on\"><\/span>Build a measurement loop ops can act on<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>Measure this by\u2026 running weekly call blocks that are intentionally comparable (same time window, same routing rules), then splitting results by source, line_type, and validation recency.<\/p>\n<ul>\n<li><strong>Connect Rate<\/strong> = connected calls \/ total dials (report per 100 dials).<\/li>\n<li><strong>Connects per hour (formula)<\/strong> = (dials per hour) \u00d7 (Connect Rate). Use your own observed dials\/hour and your own Connect Rate from comparable call blocks.<\/li>\n<\/ul>\n<p>We don\u2019t publish a single universal percentage here because your baseline depends on mix (line type, specialty, time window, and list hygiene). The point is consistency: comparable call blocks make improvements obvious.<\/p>\n<h3><span class=\"ez-toc-section\" id=\"Refresh_triggers_instead_of_fixed_schedules\"><\/span>Refresh triggers (instead of fixed schedules)<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<ul>\n<li>If a source slice\u2019s Connect Rate drops across two comparable call blocks, re-validate that slice.<\/li>\n<li>If wrong_person rises, audit dedupe keys and mapping rules (NPI\/license alignment).<\/li>\n<li>If gatekeeper outcomes dominate, separate office lines into their own call blocks and adjust scripts.<\/li>\n<\/ul>\n<h3><span class=\"ez-toc-section\" id=\"Suppression_and_consent_handling\"><\/span>Suppression and consent handling<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>Make opt-out and do_not_contact outcomes irreversible in the workflow. Your list should suppress across all sources and future imports. Track <strong>consent<\/strong> signals where applicable, and don\u2019t \u201cre-add\u201d suppressed contacts because a new source file appears.<\/p>\n<h3><span class=\"ez-toc-section\" id=\"Make_it_easy_to_start_and_hard_to_break\"><\/span>Make it easy to start and hard to break<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<ul>\n<li>Lock required columns in your CSV template.<\/li>\n<li>Reject imports missing phone_number or opt_out_status; quarantine imports missing NPI\/license or phone_validation fields for cleanup before dialing.<\/li>\n<li>Keep a single owner for list hygiene (ops) and a single owner for outcomes (recruiting).<\/li>\n<\/ul>\n<p>If you want to move fast, you can <strong>start free search &amp; preview data<\/strong> (access + refresh + verification + suppression, not a static list) and then export into the template once your routing fields are in place.<\/p>\n<h2><span class=\"ez-toc-section\" id=\"Legal_and_ethical_use\"><\/span>Legal and ethical use<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>This playbook is about legitimate recruiting outreach. Build your process around respect and suppression:<\/p>\n<ul>\n<li>Honor <strong>opt-out<\/strong> requests immediately and globally (across all lists and sources).<\/li>\n<li>Be transparent about who you are and why you\u2019re calling.<\/li>\n<li>Keep notes professional; avoid storing sensitive personal data.<\/li>\n<li>Follow applicable phone\/SMS rules and local data laws. For baseline U.S. guidance, review the TCPA overview from the FCC: <a href=\"https:\/\/www.fcc.gov\/general\/telephone-consumer-protection-act-1991-tcpa\">Telephone Consumer Protection Act (TCPA)<\/a>.<\/li>\n<\/ul>\n<p>Heartbeat.ai does not provide legal counsel; if you have edge cases (multi-state outreach, texting policies, consent language), get your counsel to bless the workflow.<\/p>\n<h2><span class=\"ez-toc-section\" id=\"Evidence_and_trust_notes\"><\/span>Evidence and trust notes<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>This guide is designed to be auditable: you can trace each row to a source, see validation recency, and compare outcomes by call block. For how Heartbeat approaches data quality, verification, and suppression, see our <a href=\"http:\/\/heartbeat.ai\/resources\/resources\/trust-methodology\/\">Trust Methodology<\/a>.<\/p>\n<p>Related implementation resource: <a href=\"http:\/\/heartbeat.ai\/resources\/integrations-automation\/csv-import-template-physician-contacts\/\">CSV import template for physician contacts<\/a>.<\/p>\n<p>External baseline reference used for compliance context: <a href=\"https:\/\/www.fcc.gov\/general\/telephone-consumer-protection-act-1991-tcpa\">FCC TCPA overview<\/a>.<\/p>\n<h2><span class=\"ez-toc-section\" id=\"FAQs\"><\/span>FAQs<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<h3><span class=\"ez-toc-section\" id=\"What_columns_do_I_need_to_build_a_physician_call_list_that_recruiters_will_actually_use\"><\/span>What columns do I need to build a physician call list that recruiters will actually use?<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>At minimum: physician name, NPI (or license_state + license_number), phone_number, line_type, phone_validation_status + date, source, call_block_id, attempt_count, last_call_outcome\/date, and opt_out_status.<\/p>\n<h3><span class=\"ez-toc-section\" id=\"How_do_I_dedupe_physicians_across_multiple_sources_without_losing_good_numbers\"><\/span>How do I dedupe physicians across multiple sources without losing good numbers?<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>Dedupe at the physician level using NPI\/license, then keep multiple phone numbers as separate dial targets tied to the same physician_id with their own validation status, line type, and outcomes.<\/p>\n<h3><span class=\"ez-toc-section\" id=\"How_often_should_I_refresh_phone_validation\"><\/span>How often should I refresh phone validation?<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>Use triggers: refresh when you see no-answer clusters (same source + same phone_validation_date cohort producing repeated no_answer outcomes) or a source slice\u2019s Connect Rate drops across comparable call blocks.<\/p>\n<h3><span class=\"ez-toc-section\" id=\"Should_I_dial_office_lines_and_mobile_numbers_in_the_same_block\"><\/span>Should I dial office lines and mobile numbers in the same block?<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>Usually no. Separate blocks by line_type so your metrics are interpretable and your scripts match the channel. If you must mix, tag line_type and report Connect Rate per 100 dials by line_type.<\/p>\n<h3><span class=\"ez-toc-section\" id=\"Whats_the_fastest_way_to_get_a_list_into_Heartbeatai\"><\/span>What\u2019s the fastest way to get a list into Heartbeat.ai?<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>Use a clean CSV template and map fields once, then keep the same header going forward. You can <a href=\"https:\/\/heartbeat.ai\/upload-file\">upload your file here<\/a> to start mapping.<\/p>\n<h2><span class=\"ez-toc-section\" id=\"Next_steps\"><\/span>Next steps<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<ul>\n<li>Implement the CSV header line above and enforce required fields (NPI\/license, validation, line type, suppression).<\/li>\n<li>Run one controlled call block and split results by source and line_type to find the fastest fixes.<\/li>\n<li>Align your team on definitions and routing using <a href=\"http:\/\/heartbeat.ai\/resources\/provider-contact-data\/office-line-vs-direct-dial-vs-mobile\/\">line type guidance<\/a> and <a href=\"http:\/\/heartbeat.ai\/resources\/provider-contact-data\/npi-license-matching\/\">NPI\/license matching<\/a>.<\/li>\n<li>When you\u2019re ready to operationalize, <a href=\"https:\/\/heartbeat.ai\/signup\">create a Heartbeat.ai account<\/a> and <strong>start free search &amp; preview data<\/strong>.<\/li>\n<\/ul>\n<h2><span class=\"ez-toc-section\" id=\"About_the_Author\"><\/span><b>About the Author<\/b><span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p><a href=\"http:\/\/heartbeat.ai\/resources\/author\/ben-argeband\"><span style=\"font-weight: 400;\">Ben Argeband<\/span><\/a><span style=\"font-weight: 400;\"> 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&#8217;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 <\/span><a href=\"https:\/\/www.linkedin.com\/in\/ben-m-argeband-2427a8a3\/\"><span style=\"font-weight: 400;\">LinkedIn<\/span><\/a><span style=\"font-weight: 400;\">.<\/span><\/p>\n<p><script type=\"application\/ld+json\">{\"@context\":\"https:\/\/schema.org\",\"@type\":\"Article\",\"author\":{\"@type\":\"Person\",\"jobTitle\":\"Founder & CEO of Heartbeat.ai\",\"name\":\"Ben Argeband\"},\"description\":\"An ops-first playbook to build a physician call list that produces connects: a copy\/paste CSV header, NPI\/license dedupe, phone validation, line-type routing, call block tracking, and refresh triggers.\",\"headline\":\"How to build a physician call list\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/heartbeat.ai\/resources\/provider-contact-data\/how-to-build-a-physician-call-list\/\",\"@type\":\"WebPage\"},\"publisher\":{\"@type\":\"Organization\",\"name\":\"Heartbeat.ai\"}}<\/script><br \/>\n<script type=\"application\/ld+json\">{\"@context\":\"https:\/\/schema.org\",\"@type\":\"FAQPage\",\"mainEntity\":[{\"@type\":\"Question\",\"acceptedAnswer\":{\"@type\":\"Answer\",\"text\":\"At minimum: physician name, NPI (or license_state + license_number), phone_number, line_type, phone_validation_status + date, source, call_block_id, attempt_count, last_call_outcome\/date, and opt_out_status.\"},\"name\":\"What columns do I need to build a physician call list that recruiters will actually use?\"},{\"@type\":\"Question\",\"acceptedAnswer\":{\"@type\":\"Answer\",\"text\":\"Dedupe at the physician level using NPI\/license, then keep multiple phone numbers as separate dial targets tied to the same physician_id with their own validation status, line type, and outcomes.\"},\"name\":\"How do I dedupe physicians across multiple sources without losing good numbers?\"},{\"@type\":\"Question\",\"acceptedAnswer\":{\"@type\":\"Answer\",\"text\":\"Use triggers: refresh when you see no-answer clusters (same source + same phone_validation_date cohort producing repeated no_answer outcomes) or a source slice\u2019s Connect Rate drops across comparable call blocks.\"},\"name\":\"How often should I refresh phone validation?\"},{\"@type\":\"Question\",\"acceptedAnswer\":{\"@type\":\"Answer\",\"text\":\"Usually no. Separate blocks by line_type so your metrics are interpretable and your scripts match the channel. If you must mix, tag line_type and report Connect Rate per 100 dials by line_type.\"},\"name\":\"Should I dial office lines and mobile numbers in the same block?\"},{\"@type\":\"Question\",\"acceptedAnswer\":{\"@type\":\"Answer\",\"text\":\"Use a clean CSV template and map fields once, then keep the same header going forward. You can upload your file here to start mapping.\"},\"name\":\"What\u2019s the fastest way to get a list into Heartbeat.ai?\"}]}<\/script><\/p>","protected":false},"excerpt":{"rendered":"<p>An ops-first playbook to build a physician call list that produces connects: a copy\/paste CSV header, NPI\/license dedupe, phone validation, line-type routing, call block tracking, and refresh triggers.<\/p>","protected":false},"author":5,"featured_media":54322,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"_yoast_wpseo_focuskw":"build a physician call list","_yoast_wpseo_title":"How to Build a Physician Call List (CSV Template + Workflow)","_yoast_wpseo_metadesc":"Build a physician call list that recruiters trust: copy\/paste CSV header, NPI\/license dedupe, phone validation, line-type routing, call block tracking, and refresh triggers.","_custom_permalink":"provider-contact-data\/how-to-build-a-physician-call-list","footnotes":""},"categories":[1],"tags":[],"class_list":["post-54323","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-news"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.4 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\r\n<title>How to Build a Physician Call List (CSV Template + Workflow)<\/title>\r\n<meta name=\"description\" content=\"Build a physician call list that recruiters trust: copy\/paste CSV header, NPI\/license dedupe, phone validation, line-type routing, call block tracking, and refresh triggers.\" \/>\r\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\r\n<link rel=\"canonical\" href=\"http:\/\/heartbeat.ai\/resources\/provider-contact-data\/how-to-build-a-physician-call-list\/\" \/>\r\n<meta property=\"og:locale\" content=\"en_US\" \/>\r\n<meta property=\"og:type\" content=\"article\" \/>\r\n<meta property=\"og:title\" content=\"How to Build a Physician Call List (CSV Template + Workflow)\" \/>\r\n<meta property=\"og:description\" content=\"Build a physician call list that recruiters trust: copy\/paste CSV header, NPI\/license dedupe, phone validation, line-type routing, call block tracking, and refresh triggers.\" \/>\r\n<meta property=\"og:url\" content=\"http:\/\/heartbeat.ai\/resources\/provider-contact-data\/how-to-build-a-physician-call-list\/\" \/>\r\n<meta property=\"og:site_name\" content=\"Heartbeat.ai\" \/>\r\n<meta property=\"article:published_time\" content=\"2026-02-01T19:00:14+00:00\" \/>\r\n<meta property=\"article:modified_time\" content=\"2026-02-27T19:34:55+00:00\" \/>\r\n<meta property=\"og:image\" content=\"https:\/\/hc.heartbeat.ai\/wp-content\/uploads\/2026\/02\/how-to-build-a-physician-call-list-4ac9e7b9.png\" \/>\r\n\t<meta property=\"og:image:width\" content=\"1024\" \/>\r\n\t<meta property=\"og:image:height\" content=\"1024\" \/>\r\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\r\n<meta name=\"author\" content=\"Ben Argeband\" \/>\r\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\r\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Ben Argeband\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"14 minutes\" \/>\r\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"http:\\\/\\\/heartbeat.ai\\\/resources\\\/provider-contact-data\\\/how-to-build-a-physician-call-list\\\/#article\",\"isPartOf\":{\"@id\":\"http:\\\/\\\/heartbeat.ai\\\/resources\\\/provider-contact-data\\\/how-to-build-a-physician-call-list\\\/\"},\"author\":{\"name\":\"Ben Argeband\",\"@id\":\"http:\\\/\\\/heartbeat.ai\\\/resources\\\/#\\\/schema\\\/person\\\/7b323ddce9b211907423482e2f9db173\"},\"headline\":\"How to Build a Physician Call List (CSV Template, Dedupe, Validate, Route)\",\"datePublished\":\"2026-02-01T19:00:14+00:00\",\"dateModified\":\"2026-02-27T19:34:55+00:00\",\"mainEntityOfPage\":{\"@id\":\"http:\\\/\\\/heartbeat.ai\\\/resources\\\/provider-contact-data\\\/how-to-build-a-physician-call-list\\\/\"},\"wordCount\":2779,\"commentCount\":0,\"publisher\":{\"@id\":\"http:\\\/\\\/heartbeat.ai\\\/resources\\\/#organization\"},\"image\":{\"@id\":\"http:\\\/\\\/heartbeat.ai\\\/resources\\\/provider-contact-data\\\/how-to-build-a-physician-call-list\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/hc.heartbeat.ai\\\/wp-content\\\/uploads\\\/2026\\\/02\\\/how-to-build-a-physician-call-list-4ac9e7b9.png\",\"articleSection\":[\"News\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"http:\\\/\\\/heartbeat.ai\\\/resources\\\/provider-contact-data\\\/how-to-build-a-physician-call-list\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"http:\\\/\\\/heartbeat.ai\\\/resources\\\/provider-contact-data\\\/how-to-build-a-physician-call-list\\\/\",\"url\":\"http:\\\/\\\/heartbeat.ai\\\/resources\\\/provider-contact-data\\\/how-to-build-a-physician-call-list\\\/\",\"name\":\"How to Build a Physician Call List (CSV Template + Workflow)\",\"isPartOf\":{\"@id\":\"http:\\\/\\\/heartbeat.ai\\\/resources\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"http:\\\/\\\/heartbeat.ai\\\/resources\\\/provider-contact-data\\\/how-to-build-a-physician-call-list\\\/#primaryimage\"},\"image\":{\"@id\":\"http:\\\/\\\/heartbeat.ai\\\/resources\\\/provider-contact-data\\\/how-to-build-a-physician-call-list\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/hc.heartbeat.ai\\\/wp-content\\\/uploads\\\/2026\\\/02\\\/how-to-build-a-physician-call-list-4ac9e7b9.png\",\"datePublished\":\"2026-02-01T19:00:14+00:00\",\"dateModified\":\"2026-02-27T19:34:55+00:00\",\"description\":\"Build a physician call list that recruiters trust: copy\\\/paste CSV header, NPI\\\/license dedupe, phone validation, line-type routing, call block tracking, and refresh triggers.\",\"breadcrumb\":{\"@id\":\"http:\\\/\\\/heartbeat.ai\\\/resources\\\/provider-contact-data\\\/how-to-build-a-physician-call-list\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"http:\\\/\\\/heartbeat.ai\\\/resources\\\/provider-contact-data\\\/how-to-build-a-physician-call-list\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"http:\\\/\\\/heartbeat.ai\\\/resources\\\/provider-contact-data\\\/how-to-build-a-physician-call-list\\\/#primaryimage\",\"url\":\"https:\\\/\\\/hc.heartbeat.ai\\\/wp-content\\\/uploads\\\/2026\\\/02\\\/how-to-build-a-physician-call-list-4ac9e7b9.png\",\"contentUrl\":\"https:\\\/\\\/hc.heartbeat.ai\\\/wp-content\\\/uploads\\\/2026\\\/02\\\/how-to-build-a-physician-call-list-4ac9e7b9.png\",\"width\":1024,\"height\":1024},{\"@type\":\"BreadcrumbList\",\"@id\":\"http:\\\/\\\/heartbeat.ai\\\/resources\\\/provider-contact-data\\\/how-to-build-a-physician-call-list\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/heartbeat.ai\\\/healthcare\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"How to Build a Physician Call List (CSV Template, Dedupe, Validate, Route)\"}]},{\"@type\":\"WebSite\",\"@id\":\"http:\\\/\\\/heartbeat.ai\\\/resources\\\/#website\",\"url\":\"http:\\\/\\\/heartbeat.ai\\\/resources\\\/\",\"name\":\"Heartbeat.ai\",\"description\":\"\",\"publisher\":{\"@id\":\"http:\\\/\\\/heartbeat.ai\\\/resources\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"http:\\\/\\\/heartbeat.ai\\\/resources\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"http:\\\/\\\/heartbeat.ai\\\/resources\\\/#organization\",\"name\":\"Heartbeat.ai\",\"url\":\"http:\\\/\\\/heartbeat.ai\\\/resources\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"http:\\\/\\\/heartbeat.ai\\\/resources\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/hc.heartbeat.ai\\\/wp-content\\\/uploads\\\/2021\\\/04\\\/Heartbeat.ai-logo.png\",\"contentUrl\":\"https:\\\/\\\/hc.heartbeat.ai\\\/wp-content\\\/uploads\\\/2021\\\/04\\\/Heartbeat.ai-logo.png\",\"width\":704,\"height\":126,\"caption\":\"Heartbeat.ai\"},\"image\":{\"@id\":\"http:\\\/\\\/heartbeat.ai\\\/resources\\\/#\\\/schema\\\/logo\\\/image\\\/\"}},{\"@type\":\"Person\",\"@id\":\"http:\\\/\\\/heartbeat.ai\\\/resources\\\/#\\\/schema\\\/person\\\/7b323ddce9b211907423482e2f9db173\",\"name\":\"Ben Argeband\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/9cdd6acf262740ced0b6a1c76378e93640df32a98d2f4d29507f31fbce6817e7?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/9cdd6acf262740ced0b6a1c76378e93640df32a98d2f4d29507f31fbce6817e7?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/9cdd6acf262740ced0b6a1c76378e93640df32a98d2f4d29507f31fbce6817e7?s=96&d=mm&r=g\",\"caption\":\"Ben Argeband\"},\"url\":\"http:\\\/\\\/heartbeat.ai\\\/resources\\\/author\\\/ben-argeband\\\/\"}]}<\/script>\r\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"How to Build a Physician Call List (CSV Template + Workflow)","description":"Build a physician call list that recruiters trust: copy\/paste CSV header, NPI\/license dedupe, phone validation, line-type routing, call block tracking, and refresh triggers.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"http:\/\/heartbeat.ai\/resources\/provider-contact-data\/how-to-build-a-physician-call-list\/","og_locale":"en_US","og_type":"article","og_title":"How to Build a Physician Call List (CSV Template + Workflow)","og_description":"Build a physician call list that recruiters trust: copy\/paste CSV header, NPI\/license dedupe, phone validation, line-type routing, call block tracking, and refresh triggers.","og_url":"http:\/\/heartbeat.ai\/resources\/provider-contact-data\/how-to-build-a-physician-call-list\/","og_site_name":"Heartbeat.ai","article_published_time":"2026-02-01T19:00:14+00:00","article_modified_time":"2026-02-27T19:34:55+00:00","og_image":[{"width":1024,"height":1024,"url":"https:\/\/hc.heartbeat.ai\/wp-content\/uploads\/2026\/02\/how-to-build-a-physician-call-list-4ac9e7b9.png","type":"image\/png"}],"author":"Ben Argeband","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Ben Argeband","Est. reading time":"14 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"http:\/\/heartbeat.ai\/resources\/provider-contact-data\/how-to-build-a-physician-call-list\/#article","isPartOf":{"@id":"http:\/\/heartbeat.ai\/resources\/provider-contact-data\/how-to-build-a-physician-call-list\/"},"author":{"name":"Ben Argeband","@id":"http:\/\/heartbeat.ai\/resources\/#\/schema\/person\/7b323ddce9b211907423482e2f9db173"},"headline":"How to Build a Physician Call List (CSV Template, Dedupe, Validate, Route)","datePublished":"2026-02-01T19:00:14+00:00","dateModified":"2026-02-27T19:34:55+00:00","mainEntityOfPage":{"@id":"http:\/\/heartbeat.ai\/resources\/provider-contact-data\/how-to-build-a-physician-call-list\/"},"wordCount":2779,"commentCount":0,"publisher":{"@id":"http:\/\/heartbeat.ai\/resources\/#organization"},"image":{"@id":"http:\/\/heartbeat.ai\/resources\/provider-contact-data\/how-to-build-a-physician-call-list\/#primaryimage"},"thumbnailUrl":"https:\/\/hc.heartbeat.ai\/wp-content\/uploads\/2026\/02\/how-to-build-a-physician-call-list-4ac9e7b9.png","articleSection":["News"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["http:\/\/heartbeat.ai\/resources\/provider-contact-data\/how-to-build-a-physician-call-list\/#respond"]}]},{"@type":"WebPage","@id":"http:\/\/heartbeat.ai\/resources\/provider-contact-data\/how-to-build-a-physician-call-list\/","url":"http:\/\/heartbeat.ai\/resources\/provider-contact-data\/how-to-build-a-physician-call-list\/","name":"How to Build a Physician Call List (CSV Template + Workflow)","isPartOf":{"@id":"http:\/\/heartbeat.ai\/resources\/#website"},"primaryImageOfPage":{"@id":"http:\/\/heartbeat.ai\/resources\/provider-contact-data\/how-to-build-a-physician-call-list\/#primaryimage"},"image":{"@id":"http:\/\/heartbeat.ai\/resources\/provider-contact-data\/how-to-build-a-physician-call-list\/#primaryimage"},"thumbnailUrl":"https:\/\/hc.heartbeat.ai\/wp-content\/uploads\/2026\/02\/how-to-build-a-physician-call-list-4ac9e7b9.png","datePublished":"2026-02-01T19:00:14+00:00","dateModified":"2026-02-27T19:34:55+00:00","description":"Build a physician call list that recruiters trust: copy\/paste CSV header, NPI\/license dedupe, phone validation, line-type routing, call block tracking, and refresh triggers.","breadcrumb":{"@id":"http:\/\/heartbeat.ai\/resources\/provider-contact-data\/how-to-build-a-physician-call-list\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["http:\/\/heartbeat.ai\/resources\/provider-contact-data\/how-to-build-a-physician-call-list\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"http:\/\/heartbeat.ai\/resources\/provider-contact-data\/how-to-build-a-physician-call-list\/#primaryimage","url":"https:\/\/hc.heartbeat.ai\/wp-content\/uploads\/2026\/02\/how-to-build-a-physician-call-list-4ac9e7b9.png","contentUrl":"https:\/\/hc.heartbeat.ai\/wp-content\/uploads\/2026\/02\/how-to-build-a-physician-call-list-4ac9e7b9.png","width":1024,"height":1024},{"@type":"BreadcrumbList","@id":"http:\/\/heartbeat.ai\/resources\/provider-contact-data\/how-to-build-a-physician-call-list\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/heartbeat.ai\/healthcare\/"},{"@type":"ListItem","position":2,"name":"How to Build a Physician Call List (CSV Template, Dedupe, Validate, Route)"}]},{"@type":"WebSite","@id":"http:\/\/heartbeat.ai\/resources\/#website","url":"http:\/\/heartbeat.ai\/resources\/","name":"Heartbeat.ai","description":"","publisher":{"@id":"http:\/\/heartbeat.ai\/resources\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"http:\/\/heartbeat.ai\/resources\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"http:\/\/heartbeat.ai\/resources\/#organization","name":"Heartbeat.ai","url":"http:\/\/heartbeat.ai\/resources\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"http:\/\/heartbeat.ai\/resources\/#\/schema\/logo\/image\/","url":"https:\/\/hc.heartbeat.ai\/wp-content\/uploads\/2021\/04\/Heartbeat.ai-logo.png","contentUrl":"https:\/\/hc.heartbeat.ai\/wp-content\/uploads\/2021\/04\/Heartbeat.ai-logo.png","width":704,"height":126,"caption":"Heartbeat.ai"},"image":{"@id":"http:\/\/heartbeat.ai\/resources\/#\/schema\/logo\/image\/"}},{"@type":"Person","@id":"http:\/\/heartbeat.ai\/resources\/#\/schema\/person\/7b323ddce9b211907423482e2f9db173","name":"Ben Argeband","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/secure.gravatar.com\/avatar\/9cdd6acf262740ced0b6a1c76378e93640df32a98d2f4d29507f31fbce6817e7?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/9cdd6acf262740ced0b6a1c76378e93640df32a98d2f4d29507f31fbce6817e7?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/9cdd6acf262740ced0b6a1c76378e93640df32a98d2f4d29507f31fbce6817e7?s=96&d=mm&r=g","caption":"Ben Argeband"},"url":"http:\/\/heartbeat.ai\/resources\/author\/ben-argeband\/"}]}},"_links":{"self":[{"href":"http:\/\/heartbeat.ai\/resources\/wp-json\/wp\/v2\/posts\/54323","targetHints":{"allow":["GET"]}}],"collection":[{"href":"http:\/\/heartbeat.ai\/resources\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/heartbeat.ai\/resources\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/heartbeat.ai\/resources\/wp-json\/wp\/v2\/users\/5"}],"replies":[{"embeddable":true,"href":"http:\/\/heartbeat.ai\/resources\/wp-json\/wp\/v2\/comments?post=54323"}],"version-history":[{"count":1,"href":"http:\/\/heartbeat.ai\/resources\/wp-json\/wp\/v2\/posts\/54323\/revisions"}],"predecessor-version":[{"id":54520,"href":"http:\/\/heartbeat.ai\/resources\/wp-json\/wp\/v2\/posts\/54323\/revisions\/54520"}],"wp:featuredmedia":[{"embeddable":true,"href":"http:\/\/heartbeat.ai\/resources\/wp-json\/wp\/v2\/media\/54322"}],"wp:attachment":[{"href":"http:\/\/heartbeat.ai\/resources\/wp-json\/wp\/v2\/media?parent=54323"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/heartbeat.ai\/resources\/wp-json\/wp\/v2\/categories?post=54323"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/heartbeat.ai\/resources\/wp-json\/wp\/v2\/tags?post=54323"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}