Crawling API / Duolingo

Duolingo Scraper.
Any page, fully rendered.

Send any Duolingo URL and get the fully rendered HTML back, through residential proxies with anti-bot handling built in.
Turn it into JSON with the generic extractor.

99% success rate140M residential IPs30 geographies
Duolingo URLHTML or JSONwww.duolingo.com/course/es/en/Learn-SpanishCrawlbaseRouteRenderExtractRendered HTMLStructured JSONcrawling-apigeneric-extractorduolingo.com · bot check cleared · 200
Live crawl feed · Duolingo1.24M req/minStreaming
200duolingo.com/esES204ms
200duolingo.com/course/pt/en/Learn-PortugueseES147ms
200duolingo.com/esBR119ms
200duolingo.com/profile/maria_langBR200ms
200duolingo.com/course/de/en/Learn-GermanGB191ms
301duolingo.com/course/ja/en/Learn-JapaneseDE42ms
200duolingo.com/course/zh/en/Learn-ChineseUS129ms
404duolingo.com/course/pt/en/Learn-PortugueseFR160ms
200duolingo.com/course/fr/en/Learn-FrenchAU211ms
200duolingo.com/course/it/en/Learn-ItalianES143ms
200duolingo.com/profile/kenji88CA65ms
200duolingo.com/profile/kenji88JP173ms
200duolingo.com/course/fr/en/Learn-FrenchSG156ms
200duolingo.com/course/fr/en/Learn-FrenchCA202ms
200duolingo.com/course/de/en/Learn-GermanGB129ms
200duolingo.com/course/es/en/Learn-SpanishIN63ms
200duolingo.com/course/es/en/Learn-SpanishES191ms
200duolingo.com/course/de/en/Learn-GermanAU190ms
200duolingo.com/profile/luca_devIN54ms
200duolingo.com/course/pt/en/Learn-PortugueseGB151ms
200duolingo.com/learnDE57ms
200duolingo.com/learnNL93ms
200duolingo.com/profile/kenji88ES149ms
200duolingo.com/leaderboardsGB54ms
200duolingo.com/course/zh/en/Learn-ChineseBR174ms
200duolingo.com/coursesIN194ms
200duolingo.com/esES204ms
200duolingo.com/course/pt/en/Learn-PortugueseES147ms
200duolingo.com/esBR119ms
200duolingo.com/profile/maria_langBR200ms
200duolingo.com/course/de/en/Learn-GermanGB191ms
301duolingo.com/course/ja/en/Learn-JapaneseDE42ms
200duolingo.com/course/zh/en/Learn-ChineseUS129ms
404duolingo.com/course/pt/en/Learn-PortugueseFR160ms
200duolingo.com/course/fr/en/Learn-FrenchAU211ms
200duolingo.com/course/it/en/Learn-ItalianES143ms
200duolingo.com/profile/kenji88CA65ms
200duolingo.com/profile/kenji88JP173ms
200duolingo.com/course/fr/en/Learn-FrenchSG156ms
200duolingo.com/course/fr/en/Learn-FrenchCA202ms
200duolingo.com/course/de/en/Learn-GermanGB129ms
200duolingo.com/course/es/en/Learn-SpanishIN63ms
200duolingo.com/course/es/en/Learn-SpanishES191ms
200duolingo.com/course/de/en/Learn-GermanAU190ms
200duolingo.com/profile/luca_devIN54ms
200duolingo.com/course/pt/en/Learn-PortugueseGB151ms
200duolingo.com/learnDE57ms
200duolingo.com/learnNL93ms
200duolingo.com/profile/kenji88ES149ms
200duolingo.com/leaderboardsGB54ms
200duolingo.com/course/zh/en/Learn-ChineseBR174ms
200duolingo.com/coursesIN194ms
01 Live demo

Any Duolingo URL in. HTML or JSON out.

The Crawling API, typed live. Get the rendered HTML, or switch to the generic extractor for JSON. Hover to pause and read.

ready
keys 1-2 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, everything Duolingo throws at you.

Duolingo is a JavaScript single-page app where course trees, leaderboards and profiles render through internal APIs, with bot detection on the app and profile pages. The Crawling API renders it in a real browser, reaches it through residential IPs, and hands you clean HTML or JSON.

render

Full JavaScript rendering

A real browser executes the single-page app, so course units, lessons, leaderboards and profile data loaded through internal APIs are all captured, not just the initial shell.

proxies

140M residential IPs

Every request rotates a residential IP across 30 geographies, so you reach Duolingo like a real local learner.

anti-bot

Blocks handled for you

CAPTCHAs, bot walls and rate limits are cleared automatically. Nothing to solve, nothing to maintain.

format

HTML or JSON

Get the full rendered HTML, or add scraper=generic-extractor to return title, content, images and links as structured JSON.

extras

Screenshots and async

The same call can capture a full-page screenshot, or run asynchronously with webhooks and cloud storage.

one token

One API for every site

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

03 Output

Rendered HTML, or clean JSON.

By default you get the rendered HTML. Add the generic-extractor and the same page comes back as typed JSON.

{ "title": "Learn Spanish | Duolingo", "favicon": "https://d35aaqx5ub95lt.cloudfront.net/favicon.ico", "meta": { "description": "Learn a language for free with Duolingo.", "keywords": "..." }, "content": "Course units, lessons, leaderboards and profile data...", "canonical": "https://www.duolingo.com/course/es/en/Learn-Spanish", "images": [ "..." ], "og_images": [ "..." ], "links": [ "..." ] }

Page

title · string  canonical · string  favicon · string

Meta

meta.description · string  meta.keywords · string

Content

content · string

Media

images · array  og_images · array

Links

links · array

04 How it works

From URL to data in one call.

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

01

Send the URL

Pass any public Duolingo URL with your token: a course, the catalog, a leaderboard or a public profile.

02

Rotate a proxy

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

03

Render the page

A real browser loads the single-page app so course units, leaderboards and profile data render before capture.

04

Clear anti-bot

Duolingo's bot checks on the app and profile pages 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 the generic extractor.

05 Use cases

What teams build on Duolingo data.

USE / 01Courses

Course & content monitoring

Track course units, lessons and catalog changes across language pairs as Duolingo updates them.

USE / 02Language

Language-learning data

Collect course content, exercise prompts and localized strings to study how lessons are structured.

USE / 03Compete

Competitive analysis

Benchmark course coverage, features and leaderboards against other language-learning apps.

USE / 04Localization

Localization research

Compare the same course across from and to languages to inform translation and localization work.

USE / 05Training

Training data & RAG

Feed clean Duolingo text into models, RAG pipelines and agents through one API.

USE / 06Coverage

Any URL, one API

Crawl courses, the catalog, leaderboards and profiles, plus any other site you need.

06 Notes

Good to know when scraping Duolingo.

Rendered like a real browser

Duolingo is a single-page app; the Crawling API runs a real browser so course trees, leaderboards and profile data load through their internal APIs before capture.

HTML by default, JSON on request

You get the full rendered HTML. Add scraper=generic-extractor for parsed title, content, images and links, or parse the HTML yourself.

Language pairs live in the path

A course URL carries the from and to languages, so you can target a specific pair and geotarget the request for localized content.

Reach Duolingo from anywhere

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

07 Why Crawlbase

Built to crawl Duolingo 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 Duolingo 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

Duolingo scraping questions.

Send the Duolingo 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 scraper=generic-extractor to get structured JSON instead.
Yes. By default the Crawling API returns rendered HTML; add the generic extractor (scraper=generic-extractor) to receive title, meta, content, images and links as JSON, or parse the HTML yourself.
Yes. Duolingo is a single-page app, so a real browser executes it and the course trees, lessons, leaderboards and profile data that load through internal APIs are captured, not just the initial shell.
Crawlbase routes each request through rotating residential IPs across 30 geographies and clears bot checks automatically. You do not manage proxies or solve CAPTCHAs, and there is nothing to maintain when Duolingo changes its setup.
Yes. Pass any course URL (the from and to languages live in the path) and geotarget the request, so you can collect course content and localized strings across language pairs.
Any public URL: course and unit pages, the course catalog, leaderboards, language landing pages and public profiles. The same API works on any other site too.
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 Duolingo.
Skip the proxies and blocks.

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