HubSpot integration
Syncing learners, enrollments, and quiz results into your HubSpot CRM.
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)
- In HubSpot: Settings → Integrations → Private Apps → Create a private app. Name it “KlickCourse”.
- On the Scopes tab enable
crm.objects.contacts.read,crm.objects.contacts.writeandcrm.schemas.contacts.write. Addcrm.objects.notes.writeonly if you also want a timeline note logged per event (“Enrolled in X”, “Passed quiz Y — 85%”). - Create the app and copy the access token (starts with
pat-). - 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.