Crawling API / Exercism

Exercism Scraper.
Every track, fully rendered.

Send any Exercism URL and get the fully rendered HTML back, through residential proxies with anti-bot handling built in.
Or pull structured JSON with the exercism-serp, exercism-exercise, exercism-solutions and exercism-solution scrapers.

99% success rate140M residential IPs30 geographies
Exercism URLHTML or JSONexercism.org/tracks/ruby/exercisesCrawlbaseRouteRenderExtractRendered HTMLStructured JSONcrawling-apiexercism-solutionexercism.org · rendered + parsed · 200
Live crawl feed · Exercism1.24M req/minStreaming
404exercism.org/tracks/go/exercises/weather-forecastAU69ms
200exercism.org/tracks/rust/exercises/reverse-stringBR142ms
301exercism.org/tracks/python/exercises/leap/solutionsES176ms
301exercism.org/tracks/ruby/exercises/two-fer/solutionsES171ms
301exercism.org/tracks/javascript/exercisesDE115ms
200exercism.org/tracks/ruby/exercisesNL155ms
200exercism.org/tracks/python/exercisesBR92ms
200exercism.org/tracks/go/exercisesAU204ms
200exercism.org/tracks/python/exercisesFR189ms
200exercism.org/tracks/rust/exercises/reverse-stringGB163ms
200exercism.org/tracks/rust/exercises/reverse-string/solutions/gorbit99SG41ms
301exercism.org/tracks/javascript/exercisesCA213ms
200exercism.org/tracks/python/exercisesJP158ms
200exercism.org/tracks/python/exercises/guidos-gorgeous-lasagnaIN134ms
200exercism.org/tracks/python/exercises/leap/solutionsFR79ms
200exercism.org/tracks/rust/exercises/reverse-string/solutions/gorbit99CA71ms
200exercism.org/tracks/python/exercises/leap/solutionsCA193ms
200exercism.org/tracks/ruby/exercises/two-fer/solutionsDE67ms
200exercism.org/tracks/go/exercises/weather-forecastJP62ms
301exercism.org/tracks/ruby/exercises/two-ferFR54ms
200exercism.org/tracks/rust/exercises/reverse-string/solutions/gorbit99NL181ms
200exercism.org/tracks/rust/exercises/reverse-stringGB191ms
200exercism.org/tracks/ruby/exercises/two-fer/solutions/neilnorthropJP210ms
200exercism.org/tracks/javascript/exercisesGB60ms
200exercism.org/tracks/ruby/exercisesSG215ms
200exercism.org/tracks/ruby/exercisesCA168ms
404exercism.org/tracks/go/exercises/weather-forecastAU69ms
200exercism.org/tracks/rust/exercises/reverse-stringBR142ms
301exercism.org/tracks/python/exercises/leap/solutionsES176ms
301exercism.org/tracks/ruby/exercises/two-fer/solutionsES171ms
301exercism.org/tracks/javascript/exercisesDE115ms
200exercism.org/tracks/ruby/exercisesNL155ms
200exercism.org/tracks/python/exercisesBR92ms
200exercism.org/tracks/go/exercisesAU204ms
200exercism.org/tracks/python/exercisesFR189ms
200exercism.org/tracks/rust/exercises/reverse-stringGB163ms
200exercism.org/tracks/rust/exercises/reverse-string/solutions/gorbit99SG41ms
301exercism.org/tracks/javascript/exercisesCA213ms
200exercism.org/tracks/python/exercisesJP158ms
200exercism.org/tracks/python/exercises/guidos-gorgeous-lasagnaIN134ms
200exercism.org/tracks/python/exercises/leap/solutionsFR79ms
200exercism.org/tracks/rust/exercises/reverse-string/solutions/gorbit99CA71ms
200exercism.org/tracks/python/exercises/leap/solutionsCA193ms
200exercism.org/tracks/ruby/exercises/two-fer/solutionsDE67ms
200exercism.org/tracks/go/exercises/weather-forecastJP62ms
301exercism.org/tracks/ruby/exercises/two-ferFR54ms
200exercism.org/tracks/rust/exercises/reverse-string/solutions/gorbit99NL181ms
200exercism.org/tracks/rust/exercises/reverse-stringGB191ms
200exercism.org/tracks/ruby/exercises/two-fer/solutions/neilnorthropJP210ms
200exercism.org/tracks/javascript/exercisesGB60ms
200exercism.org/tracks/ruby/exercisesSG215ms
200exercism.org/tracks/ruby/exercisesCA168ms
01 Live demo

Four Exercism scrapers. One clean JSON each.

The four Exercism scrapers, typed live. exercism-serp lists a track's exercises, exercism-exercise pulls one exercise with instructions, exercism-solutions ranks the community submissions, and exercism-solution returns a single published solution with source. Switch tabs, or hover to pause and read.

ready
keys 1-4 switch · click to pauserun your own URL
Run your first request in minutes. Up to 20,000 free requests, no credit card.Start free
02 Capabilities

One API, every corner of Exercism.

Four dedicated scrapers cover the pages that matter: track exercise lists, single exercises, community-solution listings and individual published solutions. The Crawling API renders each page in a real browser, reaches it through residential IPs, and hands you clean HTML or JSON.

tracks

Every language track

exercism-serp turns any track exercise list into JSON: each exercise with its slug, type, title, difficulty, blurb and unlock state, plus the track exercise count.

exercises

Full exercise instructions

exercism-exercise returns a single exercise overview with its title, difficulty and the complete instructions as both text and HTML.

solutions

Community solution listings

exercism-solutions returns a paginated listing of community solutions for an exercise, each with author, language, stars, comments, views, iterations and a snippet.

source code

Full published solutions

Add scraper=exercism-solution to return one published solution with its full source code, iteration history, tests status and author.

proxies

140M residential IPs

Every request rotates a residential IP across 30 geographies and clears bot checks automatically. Nothing to solve, nothing to maintain.

one token

One API for every page

The Crawling API works on any URL, so the same token covers every Exercism track and everything else you crawl. See the live demo.

03 Output

Every solution field, as clean JSON.

Send a solution URL with scraper=exercism-solution and the solution comes back as typed JSON, source code included. Swap in exercism-serp, exercism-exercise or exercism-solutions for lists, instructions and community solutions.

{ "url": "https://exercism.org/tracks/ruby/exercises/two-fer/solutions/neilnorthrop", "track": { "slug": "ruby", "title": "Ruby" }, "exercise": { "slug": "two-fer", "type": "practice", "title": "Two Fer", "difficulty": "easy" }, "author": { "handle": "neilnorthrop" }, "language": "ruby", "numStars": 42, "numIterations": 2, "isOutOfDate": false, "publishedIterationIdx": 2, "publishedAt": "2021-03-14T09:12:07Z", "iterations": [ { "idx": 1, "testsStatus": "passed", "isPublished": false }, { "idx": 2, "testsStatus": "passed", "isPublished": true } ], "code": "def two_fer(name = \"you\")\n \"One for #{name}, one for me.\"\nend" }

Solution

url · string  track.title · string  language · string  numStars · number

Exercise

exercise.slug · string  exercise.title · string  exercise.type · string  exercise.difficulty · string

Author

author.handle · string  publishedAt · string  numIterations · number

Iterations

iterations[].idx · number  iterations[].testsStatus · string  iterations[].isPublished · boolean

Code

code · string  isOutOfDate · boolean  publishedIterationIdx · number

04 How it works

From URL to data in one call.

Every Exercism request moves through the same path. You send a URL, we operate everything in between.

01

Send the URL

Pass any public Exercism URL with your token: a track exercise list, an exercise, a solution listing or a single published solution.

02

Rotate a proxy

A residential IP and geography that reach the site cleanly, drawn from 140M IPs across 30 regions.

03

Render the page

A real browser loads the page so exercises, solutions and code render before capture.

04

Clear anti-bot

The site's bot checks and rate limits are handled automatically. Nothing to solve, nothing to maintain.

05

Return HTML or JSON

The fully rendered HTML comes back, or typed JSON when you add exercism-serp, exercism-exercise, exercism-solutions or exercism-solution.

05 Use cases

What teams build on Exercism data.

USE / 01Training

Code training data & RAG

Feed clean exercise prompts and real published solutions into models, RAG pipelines and coding agents through one API.

USE / 02Benchmarks

Solution benchmarks

Assemble structured solution datasets across languages, with stars, iterations and tests status, for evaluation and benchmarks.

USE / 03Curriculum

Curriculum & catalog sync

Mirror track exercise lists, types, difficulty and unlock order to keep learning platforms and catalogs in sync.

USE / 04Research

Language & style research

Compare how the same exercise is solved across languages and authors to study idioms, patterns and iteration history.

USE / 05Content

Docs & content pipelines

Pull exercise instructions as text and HTML to power tutorials, docs and study guides.

USE / 06Coverage

Any URL, one API

Crawl tracks, exercises, solution listings and single solutions, plus any other site you need.

06 Notes

Good to know when scraping Exercism.

Four scrapers, four page types

exercism-serp reads a track exercise list, exercism-exercise a single exercise, exercism-solutions a community-solution listing, and exercism-solution one published solution with its code.

HTML by default, JSON on request

You get the full rendered HTML. Add scraper=exercism-serp, exercism-exercise, exercism-solutions or exercism-solution for parsed JSON, or parse the HTML yourself.

Solution listings are paginated

exercism-solutions returns page, totalPages, totalCount and solutionCount alongside the solutions array, so you can walk every page for an exercise.

Reach the site from anywhere

Geotargeting across 30 regions and 140M residential IPs means consistent access without managing proxies.

07 Why Crawlbase

Built to crawl Exercism at scale.

The Crawling API runs on the same network that serves 46,000+ paying customers and 70,000+ developers. No proxies to buy, no browsers to run, nothing to patch when the site changes.

99%
Average request success rate
140M
Residential IPs, plus 98M datacenter
30
Geographies for accurate local results
20/s
Requests per second by default, more on request

One token, official SDKs for Python, Node and Ruby, and a 99.99% uptime network underneath.

08 FAQ

Exercism scraping questions.

Send any Exercism URL to the Crawlbase Crawling API with your token. Crawlbase rotates a residential proxy, renders the page in a real browser, clears bot checks, and returns the fully rendered HTML. Add a dedicated scraper (scraper=exercism-serp, exercism-exercise, exercism-solutions or exercism-solution) to get structured JSON instead.
Yes. By default the Crawling API returns rendered HTML; add a dedicated scraper to receive structured JSON: exercism-serp for a track exercise list, exercism-exercise for a single exercise, exercism-solutions for a community-solution listing, and exercism-solution for one published solution with its iterations and code.
Track exercise lists, single exercise pages, community-solution listings and individual published solutions, across every language track on exercism.org. The same API works on any other site too.
Crawlbase routes each request through rotating residential IPs across 30 geographies and clears bot checks automatically, so access stays consistent and there is nothing to maintain when the site changes its setup.
exercism-serp returns a track exercise list, each entry with its slug, type, title, difficulty, blurb and unlock state. exercism-exercise returns a single exercise overview and full instructions. exercism-solutions returns a paginated community-solution listing with author, language, stars, comments, views and iteration counts. exercism-solution returns one published solution with its full source code, iteration history and author.
Yes. The exercism-solution scraper returns the full source code of a published solution alongside its iteration history, tests status, star count and author handle.
Start free with up to 20,000 requests and no credit card. Paid plans scale with usage, and the same token works across the Crawling API and every Crawlbase scraper.

Start scraping Exercism.
Skip the proxies and rate limits.

Free to begin with up to 20,000 requests. One token for the Crawling API and every scraper.