How to scrape education data from the OSPI online learning course catalog using the Minexa API
- Minexa.ai

- 17 hours ago
- 3 min read
The OSPI Online Learning Course Catalog lists every state-approved online course available to Washington K-12 students, including provider names, grade eligibility, course levels, and direct links to provider PDFs. Pulling that data manually means clicking through paginated tables and copying rows one by one. The Minexa API removes that entirely.
Watch the full extraction walkthrough before diving into the steps below.
What the extracted data looks like
Here is a sample of what Minexa returns from the catalog. Each row represents one course listing with all its attributes cleanly separated.
[
{
"course_title": "Python",
"course_level": "Honors",
"department": "Technology",
"grade_level": "11, 12",
"provider": "2Sigma School Inc",
"term": "SY 2025-26",
"course_link": "https://2sigma.school/t/a/adv-py",
"course_pdf_link": "https://ospi.k12.wa.us/sites/default/files/2024-12/2sigma-school-onlinecourseprovider.pdf"
},
{
"course_title": "Cybersecurity",
"course_level": "Standard",
"department": "Technology",
"grade_level": "10, 11, 12",
"provider": "2Sigma School Inc",
"term": "Summer 2026",
"course_link": "https://2sigma.school/t/a/cyb-sec",
"course_pdf_link": "https://ospi.k12.wa.us/sites/default/files/2026-02/2sigma-school.pdf"
}
]Field breakdown: what each column gives you
course_level returns one of three tier labels per listing: Standard, Honors, or Advanced Placement. This lets you filter the catalog by academic rigor without any post-processing logic.
course_pdf_link encodes a direct URL to the state-approved provider PDF hosted on the OSPI domain. These PDFs contain full course descriptions and accreditation details. Having this field extracted automatically means you can programmatically fetch and archive provider documentation alongside the listing data.
term surfaces the school year or summer session label per record, such as 'SY 2025-26' or 'Summer 2026'. Because the same course often appears under multiple terms with different PDF links, the term field is the key differentiator between otherwise identical rows.
grade_level returns a comma-separated string of eligible grade numbers. A course available from grade 9 through 12 appears as '9, 10, 11, 12', making range filtering straightforward in any data tool.
Step 1: open the catalog page and launch the extension
Navigate to the OSPI Online Learning Course Catalog and open the Minexa Chrome extension. The extension detects the page structure and presents the starting options.
Click 'I'm on the right page' to confirm the target URL and move to the next configuration step.
Step 2: confirm pagination and select scraping mode
The extension detects the next-page button in the catalog table and shows the pagination configuration. Confirm it and continue. You will then choose between scraping the list only or following each course link to its detail page.
For most education data pipelines, the list view contains all the fields needed. Select 'Single list' and proceed.
Step 3: select the data container and create the scraper
Hover over the table element containing all course rows. Minexa highlights the full container. Click to select it, then click 'Create Scraper'. Within a couple of minutes, all columns are identified automatically.
Once the scraper is ready, all extracted columns appear in the preview panel with next and previous navigation to review each field.
Step 4: get the API request and run at scale
Click 'API Request' in the extension to view the pre-generated Python code. Copy your scraper ID and drop it into the request body below. The columns parameter uses top_30 to return the top-ranked fields automatically.
import requests
url = "https://api.minexa.ai/data/"
api_key = "YOUR_API_KEY"
data = {
"batches": [{
"scraper_id": 6214,
"columns": ["top_30"],
"urls": ["https://ospi.k12.wa.us/student-success/learning-alternatives/online-learning/online-learning-students-families/online-learning-course-catalog"],
"scraping": {
"js_render": True,
"proxy": "verified",
"retry": 3
}
}],
"threads": 4
}
headers = {"Content-Type": "application/json", "api-key": api_key}
response = requests.post(url, json=data, headers=headers)
print(response.json())Once the job finishes, export the full dataset to Excel or JSON directly from the Minexa dashboard.
The scraper you trained works across all paginated pages of the catalog without any additional configuration. To run this on a schedule, set up a cron job on your end and pass the catalog URL to the API at whatever interval fits your update cadence.
Get started at minexa.ai or install the Minexa Chrome extension to train your first scraper in a few minutes.
For more on building education data pipelines, see: Scraping scholarship data from Scholarship America with Minexa.ai.

Comments