Skip to content

Conversation

@PeerRich
Copy link
Member

@PeerRich PeerRich commented Jan 24, 2026

What does this PR do?

Adds a ZoomInfo integration to the Cal.com app store that enriches attendee data with B2B intelligence for bookings. When installed, hosts can enrich their booking attendees with contact and company information from ZoomInfo.

Key components:

  • OAuth authentication flow with ZoomInfo API
  • ZoomInfoService for contact enrichment with automatic token refresh
  • API endpoint (/api/integrations/zoominfo/enrich) to enrich booking attendees
  • ZoomInfoEnrichedDataDisplay React component for displaying enriched data (host-only visibility)
  • i18n translations for all UI strings

Enriched data includes:

  • Contact details (name, email, phone, job title, job function, management level)
  • Company information (name, website, industry, employee count, revenue, location)
  • LinkedIn profile URL

Link to Devin run: https://app.devin.ai/sessions/21a7e47574864c00bdb5e6ba91bee53a
Requested by: @PeerRich

Updates since last revision

  • Fixed api/callback.ts to import from config.json instead of removed _metadata.ts
  • Refactored app to follow the standard app-store template structure
  • Added __createdUsingCli and __template: "basic" flags to config.json
  • Updated package.json to use workspace:* dependencies
  • Simplified index.ts to only export api module

Important Notes for Reviewer

⚠️ UI integration pending: The ZoomInfoEnrichedDataDisplay component is created but not yet integrated into:

  • Bookings page (apps/web/modules/bookings/views/bookings-single-view.tsx)
  • Booking success page

⚠️ Manual enrichment only: Currently enrichment is triggered via API call. Automatic enrichment on booking creation would require additional integration with the booking flow.

Human Review Checklist

  • Verify OAuth flow works with actual ZoomInfo credentials
  • Review type casting in ZoomInfoService.ts (line 121: as unknown as Prisma.InputJsonValue)
  • Confirm the enrichment API endpoint authorization logic is correct (host-only check)
  • Decide if UI integration should be part of this PR or a follow-up

Mandatory Tasks (DO NOT REMOVE)

  • I have self-reviewed the code (A decent size PR without self-review might be rejected).
  • I have updated the developer docs in /docs if this PR makes changes that would require a documentation change. N/A - App store integration follows existing patterns.
  • I confirm automated tests are in place that prove my fix is effective or that my feature works.

How should this be tested?

  1. Environment setup:

    • Set ZOOMINFO_CLIENT_ID and ZOOMINFO_CLIENT_SECRET environment variables
    • These can be obtained from ZoomInfo Developer Portal
  2. OAuth flow:

    • Navigate to App Store → ZoomInfo → Install
    • Complete OAuth authorization with ZoomInfo
    • Verify credential is created in database
  3. Enrichment API:

    • Create a booking with attendees
    • Call POST /api/integrations/zoominfo/enrich with { bookingUid: "<uid>" }
    • Verify enriched data is stored in booking metadata
  4. Expected behavior:

    • Only the booking host can trigger enrichment
    • Enriched data is stored in booking.metadata.zoominfoEnrichedData

Checklist

  • I have read the contributing guide
  • My code follows the style guidelines of this project
  • I have commented my code, particularly in hard-to-understand areas
  • I have checked if my changes generate no new warnings

- Add ZoomInfo app to app-store with OAuth authentication
- Implement ZoomInfoService for contact/company data enrichment
- Create API endpoint to enrich booking attendees
- Add ZoomInfoEnrichedDataDisplay component for host-only view
- Add translations for ZoomInfo UI strings

Co-Authored-By: peer@cal.com <peer@cal.com>
@devin-ai-integration
Copy link
Contributor

🤖 Devin AI Engineer

I'll be helping with this pull request! Here's what you should know:

✅ I will automatically:

  • Address comments on this PR that start with 'DevinAI' or '@devin'.
  • Look at CI failures and help fix them

Note: I can only respond to comments from users who have write access to this repository.

⚙️ Control Options:

  • Disable automatic comment and CI monitoring

devin-ai-integration bot and others added 3 commits January 24, 2026 22:21
Co-Authored-By: peer@cal.com <peer@cal.com>
Co-Authored-By: peer@cal.com <peer@cal.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants