---
title: "Search"
url: "/search.md"
---

# Search

Search every lesson of Roy Osherove's free video courses: titles, sections, courses, the lesson summaries, Roy's own lesson texts and the video transcripts.

## How to search

- Open [/search/](/search/) in a browser and type a few words (Pagefind, in the browser: titles, summaries, Roy's lesson texts and transcripts).
- Link a search directly: `/search/?q=<words>`, for example [/search/?q=mock objects](/search/?q=mock%20objects).
- Results link to the lesson pages; the search page needs JavaScript. Without it, browse the [course list](/#courses) or use the API below.

## How agents can search

- **Search API:** `GET https://courses.osherove.com/api/search?q=<words>`. Ranks every lesson by its title, summary, Roy's lesson text, section, course and transcript; lessons with all the words come first; `"quoted words"` must appear together. Parameters: `q` (required, at most 200 characters and 10 words), `limit` (1 to 50, default 10), `format=md` (default) or `format=json` (or send `Accept: application/json`). Each result has the lesson and Markdown URLs, the course and section, the summary, which fields matched, and for transcript matches the paragraph with its timestamp and a YouTube link that starts the video there.
  - Markdown: `curl -s 'https://courses.osherove.com/api/search?q=extract+and+override'`
  - JSON: `curl -s 'https://courses.osherove.com/api/search?q=%22mock+objects%22&limit=5&format=json'`
  - Hebrew works too: `curl -s -G 'https://courses.osherove.com/api/search' --data-urlencode 'q=בדיקות יחידה'`
- **Search index:** [/search-index.json](/search-index.json): every lesson as one flat record (title, course, section, lesson number, URLs, summary, Roy's lesson text, transcript URL), to search or filter yourself.
- **Transcripts in one file:** [/search-transcripts.json](/search-transcripts.json): `{"<lesson URL>": [[start seconds, text], ...]}`.
- **One transcript:** `/courses/<course>/<lesson>/transcript.txt`, timestamped plain text (linked from /courses.json and the index).
- **Everything as text:** [/courses.json](/courses.json) (the catalog) and [/llms-full.txt](/llms-full.txt) (every page).
- Responses are cached for 5 minutes, not indexed (`X-Robots-Tag: noindex`) and rate-limited per client on courses.osherove.com; please keep it gentle.

## For agents and scripts

- Site index for LLMs: [/llms.txt](/llms.txt) (every course and lesson, each with a Markdown version)
- The whole catalog as JSON: [/courses.json](/courses.json) (courses, sections, lessons, URLs, durations)
- Full text of every page: [/llms-full.txt](/llms-full.txt)
