Back to Guides
Provider Management
45,000+ monthly searches
Provider Credentialing Guide
Complete guide to provider credentialing and enrollment systems. Learn CAQH integration, primary source verification, payer enrollment, and re-credentialing workflows.
Credentialing Process Timeline
1-2 weeks
Application
Provider completes credentialing application and CAQH profile
2-3 weeks
Data Collection
Gather supporting documents (licenses, certifications, CV, references)
4-8 weeks
Primary Source Verification
Verify credentials directly with issuing organizations
2-4 weeks
Review & Evaluation
Credentials committee reviews application and verifications
1-2 weeks
Committee Approval
Medical executive committee or board approval
4-6 weeks
Payer Enrollment
Submit provider to insurance payers for network participation
1 week
Final Approval
Provider receives participation agreements and effective dates
Total Timeline: 90-120 days (3-4 months)
Delays commonly occur from incomplete applications, expired documents, or unresponsive references.
Delays commonly occur from incomplete applications, expired documents, or unresponsive references.
Credentialing Database Schema
-- Provider Credentialing CREATE TABLE provider_credential ( id UUID PRIMARY KEY DEFAULT gen_random_uuid(), prov_id UUID NOT NULL, -- Identifiers npi VARCHAR(10) UNIQUE, caqh_id VARCHAR(50), -- Demographics first_nm VARCHAR(100), middle_nm VARCHAR(100), last_nm VARCHAR(100), date_of_birth DATE, ssn_last_4 VARCHAR(4), -- Credentialing Status status VARCHAR(50), -- pending, approved, denied, expired application_dt DATE, approval_dt DATE, expiration_dt DATE, -- Re-credentialing next_recredential_dt DATE, last_recredential_dt DATE, created_at TIMESTAMP DEFAULT NOW(), updated_at TIMESTAMP DEFAULT NOW() ); CREATE INDEX idx_cred_provider ON provider_credential(prov_id); CREATE INDEX idx_cred_npi ON provider_credential(npi); CREATE INDEX idx_cred_status ON provider_credential(status); -- Education & Training CREATE TABLE provider_education ( id UUID PRIMARY KEY DEFAULT gen_random_uuid(), credential_id UUID NOT NULL REFERENCES provider_credential(id), -- Education degree_type VARCHAR(50), -- MD, DO, PA, NP school_nm VARCHAR(255), graduation_dt DATE, -- Verification verified BOOLEAN DEFAULT FALSE, verification_dt DATE, verification_method VARCHAR(100), verified_by UUID, created_at TIMESTAMP DEFAULT NOW() ); -- Licenses CREATE TABLE provider_license ( id UUID PRIMARY KEY DEFAULT gen_random_uuid(), credential_id UUID NOT NULL REFERENCES provider_credential(id), -- License Details license_type VARCHAR(100), -- medical, DEA, state_controlled license_number VARCHAR(100), issuing_state VARCHAR(2), issuing_authority VARCHAR(255), -- Dates issue_dt DATE, expiration_dt DATE NOT NULL, -- Verification verified BOOLEAN DEFAULT FALSE, verification_dt DATE, verification_source VARCHAR(255), -- State medical board -- Status status VARCHAR(50), -- active, expired, suspended, revoked restrictions TEXT, created_at TIMESTAMP DEFAULT NOW() ); CREATE INDEX idx_license_cred ON provider_license(credential_id); CREATE INDEX idx_license_exp ON provider_license(expiration_dt); -- Board Certifications CREATE TABLE board_certification ( id UUID PRIMARY KEY DEFAULT gen_random_uuid(), credential_id UUID NOT NULL REFERENCES provider_credential(id), -- Certification Details specialty VARCHAR(255), board_nm VARCHAR(255), certification_number VARCHAR(100), -- Dates initial_cert_dt DATE, expiration_dt DATE, recertification_dt DATE, -- Verification verified BOOLEAN DEFAULT FALSE, verification_dt DATE, -- Status status VARCHAR(50), -- active, expired, revoked created_at TIMESTAMP DEFAULT NOW() ); -- Work History CREATE TABLE provider_work_history ( id UUID PRIMARY KEY DEFAULT gen_random_uuid(), credential_id UUID NOT NULL REFERENCES provider_credential(id), -- Employment employer_nm VARCHAR(255), position_title VARCHAR(255), department VARCHAR(255), -- Dates start_dt DATE, end_dt DATE, -- Contact supervisor_nm VARCHAR(255), supervisor_phone VARCHAR(20), -- Verification verified BOOLEAN DEFAULT FALSE, verification_dt DATE, verification_notes TEXT, created_at TIMESTAMP DEFAULT NOW() ); -- Malpractice Insurance CREATE TABLE malpractice_insurance ( id UUID PRIMARY KEY DEFAULT gen_random_uuid(), credential_id UUID NOT NULL REFERENCES provider_credential(id), -- Policy Details carrier_nm VARCHAR(255), policy_number VARCHAR(100), -- Coverage coverage_amt DECIMAL(15,2), per_occurrence DECIMAL(15,2), aggregate DECIMAL(15,2), -- Dates effective_dt DATE, expiration_dt DATE, -- Verification verified BOOLEAN DEFAULT FALSE, certificate_received BOOLEAN DEFAULT FALSE, created_at TIMESTAMP DEFAULT NOW() ); -- Payer Enrollment CREATE TABLE payer_enrollment ( id UUID PRIMARY KEY DEFAULT gen_random_uuid(), credential_id UUID NOT NULL REFERENCES provider_credential(id), payer_id UUID NOT NULL, -- Enrollment application_dt DATE, enrollment_dt DATE, effective_dt DATE, termination_dt DATE, -- IDs payer_provider_id VARCHAR(100), -- Status status VARCHAR(50), -- pending, active, denied, terminated denial_reason TEXT, -- Re-enrollment next_review_dt DATE, created_at TIMESTAMP DEFAULT NOW() ); CREATE INDEX idx_enrollment_cred ON payer_enrollment(credential_id); CREATE INDEX idx_enrollment_payer ON payer_enrollment(payer_id);
Primary Source Verification Checklist
Education & Training
- ✓Medical school degree verified with school
- ✓Residency completion verified with program
- ✓Fellowship training (if applicable)
Licenses & Certifications
- ✓State medical license with board
- ✓DEA registration with DEA
- ✓Board certification with specialty board
Professional History
- ✓Work history gaps explained
- ✓Peer references contacted (3 minimum)
- ✓Hospital privileges verified
Sanctions & Claims
- ✓NPDB query (malpractice, sanctions)
- ✓OIG/SAM exclusion check
- ✓Malpractice insurance current
SQL Query Examples
Find Expiring Licenses (Next 60 Days)
SELECT pc.first_nm || ' ' || pc.last_nm as prov_nm, pc.npi, pl.license_type, pl.license_number, pl.issuing_state, pl.expiration_dt, pl.expiration_dt - CURRENT_DATE as days_until_expiration FROM provider_credential pc JOIN provider_license pl ON pc.id = pl.credential_id WHERE pl.status = 'active' AND pl.expiration_dt BETWEEN CURRENT_DATE AND CURRENT_DATE + INTERVAL '60 days' ORDER BY pl.expiration_dt;
Providers Due for Re-credentialing
SELECT pc.first_nm || ' ' || pc.last_nm as prov_nm, pc.npi, pc.last_recredential_dt, pc.next_recredential_dt, pc.next_recredential_dt - CURRENT_DATE as days_until_due FROM provider_credential pc WHERE pc.status = 'approved' AND pc.next_recredential_dt <= CURRENT_DATE + INTERVAL '90 days' ORDER BY pc.next_recredential_dt;
CAQH Integration
CAQH ProView Database
CAQH ProView is the industry-standard universal credentialing platform. Providers maintain a single profile that payers can access, eliminating redundant data entry.
Key Benefits:
- One profile used by 1,300+ health plans and hospitals
- Automated primary source verification for some data
- Electronic data exchange reduces processing time
- Provider self-service portal for updates
Requirements:
- Providers must attest to accuracy every 120 days
- Organizations must be CAQH participants to access data
- API integration available for automated data pulls