B2B LMS PLATFORM

Leave Teachable behind. Your courses, migrated in hours.

Connect your Teachable school, select your courses, and watch the platform scrape every lesson, video, image, and PDF — then reconstruct it faithfully inside your own branded portal. Learners sign in through SSO; no new credentials required.

Learner dashboard showing enrolled courses and progress
84
Features shipped
SAML + OIDC
SSO protocols supported
AES-256
Credentials encrypted at rest
Multi-tenant
True org data isolation

[ HOW IT WORKS ]

From Teachable school to live portal — four steps

The import pipeline runs as an asynchronous background job. You watch real-time progress; the platform does the heavy lifting.

  1. STEP 01 — CONNECT

    Authenticate with your Teachable school

    Enter your Teachable admin credentials. The platform establishes a secure session and crawls your course catalog — titles, slugs, and publication status — presenting them for selection. Credentials are AES-256 encrypted at rest and never logged.

  2. STEP 02 — SCRAPE

    Extract the full course structure

    For each selected course, the scraper traverses every section and lesson in curriculum order — pulling HTML body text, embedded video iframes, image tags, and downloadable attachment links. The raw structure is staged before any media is touched.

  3. STEP 03 — MIGRATE ASSETS

    Download, deduplicate, and re-upload media

    Every image and PDF is downloaded from Teachable's CDN and re-uploaded to your private asset store under your organization's path prefix. Identical files are deduplicated by content hash. All Teachable CDN URLs in lesson bodies are rewritten to your new signed URLs.

  4. STEP 04 — PUBLISH

    Materialized content goes live instantly

    The staged import is written to the production course tables through the same data model used by the manual course builder. Your courses appear immediately in the learner catalog, accessible to anyone authenticated through your SSO provider.

0.1s$ connect teachable school: acme.teachable.com
0.4s→ Session established. Discovering course catalog…
1.2s✓ 14 courses found — credentials encrypted & stored
0.2s$ scrape course: 'Advanced Product Design' (47 lessons)
0.8s→ Sections: 6 Lessons: 47 Attachments: 12 Videos: 31
2.1s✓ Curriculum structure extracted — staging complete
0.3s$ migrate assets: 89 files queued (rate-limited)
1.1s→ Deduplicated 11 duplicate assets — uploading 78 unique
4.8s✓ All CDN URLs rewritten to signed private storage
0.1s$ materialize import-job-7f3a to production
0.6s→ Courses: 3 Sections: 18 Lessons: 47 Attachments: 12
1.0s✓ Content live — SSO learners can enroll now
[ IMPORT ENGINE ]

Real-time import monitoring — no black box

Watch the pipeline stage-by-stage: assets migrated, errors surfaced, estimated completion. Failed asset downloads don't abort the job — partial success is logged, the rest completes. A full history of past imports sits one click away.

  • Per-lesson error reporting without aborting the full run

  • Paginated import history with status and source school URL

  • Rate-limited scraping — no IP blocks, no CAPTCHAs

  • Content-hash deduplication reduces storage and import time

Import jobs dashboard showing pipeline progress
[ IDENTITY & ACCESS ]

Learners use the login they already have

Every organization connects its own identity provider — Okta, Azure AD, Google Workspace, or any SAML 2.0 / OIDC-compliant IdP. Sessions expire with the IdP token. No separate credentials to manage, reset, or audit.

Team members directory with SSO login status

One identity provider, one admin panel

  • SAML 2.0 and OIDC both supported — configure once per org

  • Admin UI for mapping IdP attributes to learner profile fields

  • Connection-test button verifies config before saving

  • Session expiry tied directly to IdP token lifetime

  • Member directory shows last login date and enrollment count

Each tenant's SSO config is isolated — one org's IdP never affects another's.

[ LEARNER EXPERIENCE ]

A course portal that feels like yours

Branded catalog

Upload your logo and set a primary color — the learner-facing catalog, lesson player, and dashboard inherit your brand without touching code.

Progress that persists

Lesson completions, percentage progress, and course completion timestamps are stored per learner and surfaced as visual progress bars on their dashboard.

Attachments with access control

PDFs and downloads are served through short-lived signed URLs generated per request — not public permanent links. Admins see which resources learners actually download.

Resume where you left off — on any device

The lesson player is mobile-optimized with a collapsible curriculum sidebar. Previous and next lesson controls traverse the full curriculum in order; clicking 'Next' marks the current lesson complete automatically.

  • YouTube, Vimeo, Wistia, and Loom video embeds

  • Rich text lesson body rendered from structured content

  • Completion badge on the dashboard when every lesson is done

Learner course catalog showing enrolled courses and progress bars
[ ADMIN TOOLS ]

Built for the people who run the program

Admins get a full suite of management tools — without needing to contact support for every change.

Enrollment management

View all learners on a course, manually add or remove individuals, or bulk-enroll via CSV upload. Filter by enrollment status to spot who hasn't started.

Progress reports & CSV export

Per-course progress tables show every learner's completion percentage, lessons finished, and enrollment date. Export as CSV for HR reporting — no third-party BI tool needed.

Audit log

Every significant admin action — SSO config changes, course publishing, enrollment edits, import starts — is recorded with a timestamp. One tab for compliance and troubleshooting.

Org-scoped settings

Branding, SSO configuration, member directory, and a controlled deletion workflow — all under a single admin settings area, fully isolated from other tenants.

Admin activity log showing recent platform events
[ COURSE BUILDER ]

Build new content alongside what you imported

The import engine and the manual course builder write through the same data model. Imported courses are immediately editable — restructure sections, replace video URLs, upload new attachments, or write new lessons from scratch.

  • Drag-and-drop reordering Visually reorder sections and lessons with optimistic updates.

  • WYSIWYG lesson editor Rich text with headings, lists, code blocks, and inline image upload.

  • Video from any provider Paste a YouTube, Vimeo, Wistia, or Loom URL — embed generated automatically.

  • Pre-publish checklist The platform validates at least one section and lesson exist before going live.

  • Attachment lifecycle Upload, manage, and delete lesson attachments — access tracked per download.

  • Thumbnail upload JPEG, PNG, and WebP supported with server-side size validation.

[ MULTI-TENANT ARCHITECTURE ]

One deployment, genuinely isolated tenants

Every organization gets its own subdomain or path prefix, its own SSO config, its own asset storage namespace, and its own data boundary. No shared tables without org-scoped partition keys — cross-tenant data leakage is architectural impossibility, not just policy.

ORG-PROVISIONacme-corp onboarded — SSO config saved, subdomain activejust now
IMPORT-JOBadvanced-design-course scrape complete — 47 lessons staged2m ago
ASSET-MIGRATE78 unique assets re-uploaded to org/acme-corp/ prefix3m ago
SSO-SESSIONlearner j.smith@acme.com authenticated via Okta SAML5m ago
ENROLLMENT32 learners bulk-enrolled via CSV — advanced-design-course8m ago
AUDIT-LOGadmin published 'Q4 Compliance Training' — 3 sections, 12 lessons11m ago
PROGRESSlearner m.chen@beta-org.com completed course — certificate state set14m ago
[ FAQ ]

Common questions

Ready to move your courses off Teachable?

Join the early access list. We'll walk you through a live import against your real Teachable school so you can see the result before committing to anything.

Questions? Email us at sf-core-org-support-csi-teachable-replacement-app@saas-factory.ai