1Product Info
2Fetch Lessons
3Review & Configure
4Process
Kajabi Product
Found in the Kajabi admin URL: /admin/products/ID

Additional Details
Pipe-separated: Meditation|Mindfulness
Decides where the Courses List row lands: after the last row of this topic's block, with the next Consolidated Order. A new topic goes to the bottom of the sheet for you to place.
Fetch Lessons from Kajabi
Two simple steps:
1
Drag this bookmarklet to your bookmarks bar:
📋 Send to Course Tool
Drag it, don't click it. Replace the one in your bookmarks bar whenever the version below changes. version …
2
Go to the Kajabi admin product page, click "Expand All" to reveal all lessons, then click the bookmarklet:
Open in Kajabi Admin
⚠️ You must click "Expand All" on the product page first so all lessons are visible. Then click the bookmarklet — you'll see a progress bar as it extracts each lesson's details.

Waiting for bookmarklet data...
Review Extracted Data
# Title Section Post ID
Processing
Pending Leave out lessons that are drafts in Kajabi
Pending Insert course into database
Pending Insert lessons into database
Pending Create course sheet tab
Pending Add to scraper_data.courses
Pending Add to scraper_data.links
Pending Update Courses List sheet
Pending Update Lessons List sheet
Pending Upload media to Google Drive
Pending Promo (trailer) from Kajabi → Drive promo/ → Courses List
Existing course

For a course that is already in the database and the Lessons List — this card is separate from steps 1–4 above. Load course shows every lesson by Kajabi Post ID with its DB description, Lessons List row, sheet description and canonical link. From there you can re-enrich descriptions, video ids and Wistia ids by running the bookmarklet on the product in Kajabi admin, fill empty runtimes from Wistia, restore missing Lessons List rows, find copied lessons and link them to their originals, and copy the lesson media from Kajabi (or from Wistia when Kajabi's copy is gone) into the course's Drive folder with the Drive links written back to the Lessons List. Nothing is written until you click a button and confirm.

Adding a lesson or a master class to a course that's already here? Follow Adding new content (Kajabi first, then Process with the existing slug, then the missing-media upload below).

Filled from the Kajabi Product card above; edit if different.
1 · Re-enrich descriptions, video ids and Wistia ids from Kajabi

Open the product in Kajabi admin (signed in), click Expand All, then click the same bookmarklet as step 2. Each post is read in a hidden frame and written to the DB row and the Lessons List row that carries its Post ID (found by header name, so the sheet layout can change). A post read successfully replaces the description; media links and the Wistia id only ever fill in. A lesson with a Wistia id and no runtime gets its runtime from Wistia as it is enriched. The browser console prints one [klaw-scrape] line per post with post id + title. Fill runtime from Wistia does the runtime part on its own for every lesson that already has a Wistia id (W in the table) and an empty runtime; a runtime already in the DB or the sheet is never overwritten.

Open product in Kajabi admin
2 · Lessons List rows
3 · Link copied lessons to their originals

Finds the same lesson in other courses (same Kajabi video id, same title, or the course named in a "This lesson is from Day N of …" blurb) and proposes it with a confidence. Nothing is applied until you confirm. Applying marks this lesson's DB row non-canonical pointing at the original and gives it the original's video filename (DB, and the sheet's slug column). With the box below checked (the default) this course's own video / thumbnail / SRT / attachment links stay exactly as they are, in the sheet and the DB — right when the media was uploaded to Drive under this course's folder. Unchecked, the original's links are copied into this lesson's sheet row and DB row as well (its sheet row wins over its DB row) — only for a course whose media was never uploaded.

4 · Upload media to Drive

Copies each lesson's video, thumbnail, SRT and attachments from the Kajabi source links stored in the DB into Drive <slug>/video, thumbnails, srt, copy, audio, named <slug>_lesson<NN>_… with NN taken from the Lessons List course_order, then writes the Drive links into the Lessons List rows by Post ID. Files already in the folder are reused, not re-uploaded. Kajabi source links expire about a week after the last enrich run, so upload soon after enriching. When the Kajabi video link answers 403/404 (or the DB has none) and the lesson has a Wistia id, the video is taken from Wistia's original upload instead (its best mp4 if there is no original); the preview's Source column says which lessons have that fallback.

5 · Cover image and audio folder links (Courses List)

Saves a durable copy of the course cover: the image behind imageurl ("Cover Image", often a Kajabi link that expires after a week) is uploaded into the course's Drive folder as <slug>_cover.<ext> and its Drive link written to Cover Image (Drive); the course's audio Drive subfolder is linked in Audio Folder (Drive) if it exists (the media upload above creates it). A cell that already has a value is kept, imageurl itself is not touched, and running it again changes nothing.

Lessons in this course
#Post IDTitleDB descriptionSheet rowSheet descriptionRuntimeWCanonical