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/course/es/en/Learn-SpanishIN178ms
200duolingo.com/course/es/en/Learn-SpanishJP113ms
200duolingo.com/leaderboardsBR206ms
200duolingo.com/course/es/en/Learn-SpanishIN49ms
200duolingo.com/learnSG141ms
200duolingo.com/course/en/es/Aprende-inglesUS63ms
200duolingo.com/course/pt/en/Learn-PortugueseNL52ms
200duolingo.com/course/en/es/Aprende-inglesDE50ms
200duolingo.com/course/it/en/Learn-ItalianDE146ms
200duolingo.com/coursesNL93ms
200duolingo.com/course/en/es/Aprende-inglesSG84ms
200duolingo.com/profile/kenji88CA195ms
200duolingo.com/profile/luca_devES205ms
200duolingo.com/course/it/en/Learn-ItalianES58ms
200duolingo.com/course/es/en/Learn-SpanishSG56ms
200duolingo.com/course/en/es/Aprende-inglesES131ms
301duolingo.com/profile/kenji88US71ms
200duolingo.com/course/zh/en/Learn-ChineseAU130ms
200duolingo.com/course/zh/en/Learn-ChineseCA202ms
200duolingo.com/profile/kenji88US104ms
200duolingo.com/course/es/en/Learn-SpanishBR83ms
200duolingo.com/course/es/en/Learn-SpanishJP99ms
404duolingo.com/course/en/es/Aprende-inglesES110ms
200duolingo.com/course/it/en/Learn-ItalianDE172ms
200duolingo.com/profile/luca_devIN114ms
200duolingo.com/profile/kenji88US41ms
200duolingo.com/course/es/en/Learn-SpanishIN178ms
200duolingo.com/course/es/en/Learn-SpanishJP113ms
200duolingo.com/leaderboardsBR206ms
200duolingo.com/course/es/en/Learn-SpanishIN49ms
200duolingo.com/learnSG141ms
200duolingo.com/course/en/es/Aprende-inglesUS63ms
200duolingo.com/course/pt/en/Learn-PortugueseNL52ms
200duolingo.com/course/en/es/Aprende-inglesDE50ms
200duolingo.com/course/it/en/Learn-ItalianDE146ms
200duolingo.com/coursesNL93ms
200duolingo.com/course/en/es/Aprende-inglesSG84ms
200duolingo.com/profile/kenji88CA195ms
200duolingo.com/profile/luca_devES205ms
200duolingo.com/course/it/en/Learn-ItalianES58ms
200duolingo.com/course/es/en/Learn-SpanishSG56ms
200duolingo.com/course/en/es/Aprende-inglesES131ms
301duolingo.com/profile/kenji88US71ms
200duolingo.com/course/zh/en/Learn-ChineseAU130ms
200duolingo.com/course/zh/en/Learn-ChineseCA202ms
200duolingo.com/profile/kenji88US104ms
200duolingo.com/course/es/en/Learn-SpanishBR83ms
200duolingo.com/course/es/en/Learn-SpanishJP99ms
404duolingo.com/course/en/es/Aprende-inglesES110ms
200duolingo.com/course/it/en/Learn-ItalianDE172ms
200duolingo.com/profile/luca_devIN114ms
200duolingo.com/profile/kenji88US41ms
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.