Course Extractor

Turn legacy courses into reusable content.

Upload a Storyline, Rise, Captivate, SCORM, or hand-built HTML course and get its text, media, quizzes, and structure back as a clean extraction package — plus prompts to rebuild it in a modern stack.

Get started free · Pricing · Enterprise, API & MCP

What you get

How it works

  1. Upload. Drop in a course .zip — a SCORM/xAPI export or a published web package, up to ~2 GB.
  2. Extract. We detect the authoring tool, extract content, media, and assessments, and map the course structure.
  3. Download. Get one extraction package: content JSON, Markdown, the original assets, and rebuild prompts.

Supported formats

Articulate Storyline 360
Read from the published player data: scenes and slides, text on every layer, alt text, the slide-to-slide navigation, the media library, and quiz questions with their choices, correct answers, and feedback.
Articulate Rise 360
Lessons and blocks in order — text, lists, images, media, and knowledge checks — read from the course data Rise publishes.
Adobe Captivate
Slides, text, images, and audio from the published HTML5 output, plus quiz questions — complete on current versions, best-effort on Captivate 11, where the quiz lives in the player code.
iSpring
Slides in order, their text and media, and quiz questions with the correct answers, from iSpring Suite’s published presentation data.
SCORM 1.2 / 2004, xAPI, and cmi5 packages
The manifest and packaging are detected separately from the authoring tool, so a SCORM wrapper around any of the above is read the same way.
Hand-built HTML, React, Vue, and other web courses
Courses with no authoring-tool data are rendered in a sandboxed browser and extracted from the live page. Anything we don’t recognise still gets a best-effort extraction, and the results say how confident each part is.

What’s in the extraction package

manifest.json
Index of the package: what was detected, counts, and every file inside.
content/screens.md
The whole course as readable Markdown, one section per screen.
content/screens.json
Screens in order, with titles, types, and where each sits in the course.
content/text-blocks.json
Every piece of text, tagged as heading, body, list item, caption, and so on.
content/quiz-questions.json
Questions, choices, correct answers, and feedback.
content/media-inventory.json
Every image, audio, video, and document, with the screen it appears on and its alt text.
content/links.json
Links in the course, each checked and marked if broken.
assets/
The original media files, copied byte for byte — never re-encoded.
course-map.json
Structure: screens, navigation, interactions, assessments, completion.
prompts/
Prompts to rebuild the course in React, Vue, or as a Claude artifact, and to review its content.

Example output

From a sample Storyline course: content/screens.md

## Screen 2: Know your exits

### Text

Know your exits
Every floor has two marked exits. Learn both before you need them.
- Never use the lifts during a fire alarm

### Media

- assets/images/floor-plan.png (alt: "Floor plan with both exits marked in green")

### Audio

- assets/audio/narration-02.mp3

---

## Screen 3: Knowledge check

### Interaction

Learner selects the best response from 3 choices.

```
Q: The fire alarm sounds. What do you do first?
  [✓] Leave by the nearest marked exit
  [ ] Take the lift to the ground floor
  [ ] Finish what you are working on
```
Feedback (correct): Right. Go now, by the nearest exit.
Feedback (incorrect): Not quite. Leave straight away, and never by lift.

The same question in content/quiz-questions.json

{
  "screenId": "s3",
  "questionText": "The fire alarm sounds. What do you do first?",
  "questionType": "multiple_choice",
  "answers": [
    { "id": "choice_1", "text": "Leave by the nearest marked exit", "isCorrect": true },
    { "id": "choice_2", "text": "Take the lift to the ground floor", "isCorrect": false },
    { "id": "choice_3", "text": "Finish what you are working on", "isCorrect": false }
  ],
  "feedback": {
    "correct": "Right. Go now, by the nearest exit.",
    "incorrect": "Not quite. Leave straight away, and never by lift."
  },
  "correctAnswer": { "indices": [0], "text": ["Leave by the nearest marked exit"] },
  "confidence": 0.95
}

API and MCP

Everything in the web app is also available over a REST API and an MCP server, so an AI agent can upload a course, read its content, and fetch the package itself.

Pricing

Free to start: 3 courses and 1 AI-assisted extraction. Pro is $49/month; Enterprise pricing is by volume. See plans.