KlickCourse

HubSpot integration

Syncing learners, enrollments, and quiz results into your HubSpot CRM.

Admin → Integrations: the HubSpot card and API keys live side by side.

What the integration does

See your learners inside HubSpot: signups, course progression, quiz results, certificates and course reviews sync onto each contact automatically. Everything lands as ordinary CRM contact properties (a “KlickCourse” property group, fields like kc_courses_enrolled, kc_last_quiz_score_pct, kc_last_certificate_url), so HubSpot lists, workflows and reports can use the data with no extra setup. Contacts are matched and created by email.

Connecting (about 5 minutes)

  1. In HubSpot: Settings → Integrations → Private Apps → Create a private app. Name it “KlickCourse”.
  2. On the Scopes tab enable crm.objects.contacts.read, crm.objects.contacts.write and crm.schemas.contacts.write. Add crm.objects.notes.write only if you also want a timeline note logged per event (“Enrolled in X”, “Passed quiz Y — 85%”).
  3. Create the app and copy the access token (starts with pat-).
  4. Here, go to Admin → Integrations, paste the token and press Connect. If you have a passkey registered you’ll be asked to confirm — that’s expected for credential changes.

The connect step validates the token live against HubSpot and creates the property group immediately — a missing scope fails right there with HubSpot’s own error message, so you know exactly what to fix. The token is stored encrypted and never shown again.

How syncing behaves

  • A sync runs automatically about every 15 minutes, plus immediately when you connect or press Sync now.
  • Progression updates when learners complete lessons (not on every second watched).
  • Property values are recomputed snapshots each run — the data is self-healing; a missed cycle catches up on the next one.
  • Hiding a review removes its rating from the next snapshot. Disconnecting stops the sync; data already in HubSpot stays.

Troubleshooting

  • “Needs attention” — HubSpot rejected the token (expired, revoked, or a scope was removed). The card shows HubSpot’s real error. Fix the private app in HubSpot (or paste a fresh token), then press Test connection.
  • Rate limits — if HubSpot answers “too many requests”, the cycle pauses and resumes on the next run automatically. Nothing is lost.
  • A learner isn’t in HubSpot yet — check the timing (up to ~15 minutes) and that the learner’s email is the one you expect; contacts are keyed by email.

Prefer to build your own sync?

If you use another CRM — or want full control — skip the native connection and poll the read feeds instead: create an API key with the crm:read scope (same Integrations page), then pull enrollments, quiz-attempts, certificates and reviews from your automation tool (n8n, Zapier, your backend). See API keys & the Course Builder API.