Superprof Scraper [$0.9💰] | Tutor Data | 7 Country Sites
Pricing
from $0.88 / 1,000 results
Superprof Scraper [$0.9💰] | Tutor Data | 7 Country Sites
Scrape Superprof tutor profiles across .fr, .es, .co.uk, .com.br, .com, .ae and .co.in: name, hourly price, subjects, location and ratings. Built for tutor lead generation, tutoring market research and private tutor price comparison. Structured JSON via API.
Pricing
from $0.88 / 1,000 results
Rating
0.0
(0)
Developer
Ahmed Jasarevic
Maintained by CommunityActor stats
0
Bookmarked
3
Total users
2
Monthly active users
5 days ago
Last modified
Categories
Share
Superprof Scraper
The Superprof Scraper extracts 29-field tutor records from Superprof's own internal /a/search/ JSON API across 7 verified country domains (.fr, .es, .co.uk, .com.br, .com, .ae, .co.in) — one row per tutor with name, photo, hourly price, currency, rating, review count, city and profile URL. It is built for tutor lead generation and tutoring market research: plain HTTP requests, no browser, no proxy, and no login — while DataDome returns 403 on Superprof's HTML, the JSON endpoint answers 200 from Apify's default network.
Use Cases — Tutor Lead Generation, Tutoring Market Research & Private Tutor Price Comparison
- Tutor lead generation — collect tutor names, profile URLs, response times, verified badges and free-first-lesson flags to build outreach-ready segments for tutoring services, agencies and edtech funnels (no emails or phone numbers — see FAQ).
- Tutoring market research — count and compare tutor listings by subject, city and country: how many tutors teach maths in Lyon versus London, or English in Madrid versus Mumbai.
- Private tutor price comparison — benchmark
hourlyPrice+currencyper subject and city straight from the dataset — the data needed to build a tutor comparison tool. - Math tutors near me — Superprof's city landing pages ("Math tutors near me in …") map straight to search URLs; the returned rows carry
city,countryanddistanceKm. - Education marketplace data — populate a tutoring marketplace, global tutor database or price-benchmarking product with structured tutor listings data: identity, price, rating, reviews and provenance in every row.
- Tutoring platforms compared — pull Superprof rows alongside Preply or italki datasets to compare rates, ratings and free-first-lesson offers across tutoring platforms.
Build A Superprof Tutor Database Without Official API Access
Superprof publishes no official developer API, so this Actor calls the site's own internal search endpoint — the JSON API the search page itself uses via XHR when you click "next page" or change filters. Paste a normal Superprof search URL (https://www.superprof.fr/s/guitare,France,Paris,,,,.html); the Actor maps it to /a/search/?adress=<place>&matiere=<subject>&page=<N>, pages the results as pure JSON and writes one row per tutor to the default dataset. It is a CheerioCrawler (HTTP + JSON parsing) at 256 MB with no Chrome — fast runs, low compute cost. Profile enrichment is off by default; endpoint, anti-bot and proxy detail follow below.
Superprof API Alternative: Structured Tutor Data With No Browser And No Login
The endpoint
GET https://www.superprof.<tld>/a/search/?adress=<place>&matiere=<subject>&page=<N>Accept: application/jsonX-Requested-With: XMLHttpRequest (optional)
Superprof's public HTML (all regional domains) sits behind DataDome (plus AWS WAF on the proxy path): a plain request to www.superprof.* returns 403 with a CAPTCHA. Rendering that headless is the expensive, fragile path — so this Actor never loads the search-results page; the internal JSON endpoint answers regular HTTP from Apify's network with no challenge at all.
- Why this endpoint: it returns the complete search-card payload as pure JSON — tutor id, name, photo, hourly price,
teacherRating {average,count}, city, response time, webcam / face-to-face flags, free-first-lesson flag, badges, profile URL — with anbPagesTotalcounter, and it is cheap to page through (page=1…N). - URL mapping: the Actor derives the API call from the public search URL a user copies from the browser —
/s/{subject},{Country},{City},,…→adress=<City|Country>,matiere=<subject>,page=<N>(slugs decoded:united-kingdom→United Kingdom). - Defensive fallback: if a page comes back with an empty result set, the same request is retried with minimal parameters (only
adress,matiere,page), so stray query params copied from the page URL can't zero out the results. - Profile enrichment (optional, off by default): profile pages are parsed with Cheerio (
bio,subjects,geo, ld+json price/rating) with layered selectors that degrade gracefully — see the known limitation below. - Hard safety caps in the code: max 500 items, max 50 pages per search, max 800 requests per run, concurrency 3, 1 retry, 45 s per request — a runaway crawl is impossible.
No Playwright / no browser is used. The /a/search/ endpoint is reverse-engineered, not official — if Superprof changes it, the fallbacks and diagnostics record surface that immediately in the dataset.
Anti-Bot, DataDome & Proxy Settings: Why This Scraper Runs With The Proxy Off
Measured live against superprof.fr and superprof.co.uk, not guessed:
| Network | Internal search JSON (/a/search/) | Profile HTML |
|---|---|---|
| Direct, no proxy (default) | ✅ 200 — full records | ❌ DataDome 403 |
| Apify proxy, datacenter group | ❌ DataDome 403 | – |
Apify proxy, UNBLOCKER group | ❌ AWS WAF 405 (captcha) | – |
Apify proxy, RESIDENTIAL group | ❌ AWS WAF 405 (captcha) | ❌ AWS WAF 405 (captcha) |
So the cheapest, fastest configuration is the default: proxy OFF. The proxy input is still provided for any future Superprof behaviour change — if runs start blocking, retry with the proxy off first, then with the UNBLOCKER group. Blocked runs push a single diagnostic record — {"__error": "blocked_by_bot_protection", "hint": …} with per-request diagnostics — visible straight from the dataset.
Known limitation — profile pages (bio / subjects / geo)
Profile HTML is protected by DataDome (datacenter IPs) and AWS WAF (every tested Apify proxy group). Until a network passes, bio and geo stay empty and subjects holds the searched subject only (subjectsFromSearch: true marks that case); the code aborts the phase after the first blocked request instead of burning one per tutor. Everything else — name, photo, headline, price, rating, review count, city, country, response time, lesson type, free-first-lesson, badges, profile URL — comes straight from the search JSON and is complete. Profiles at scale would need browser-based stealth, a paid anti-bot API (Scrapfly/Zyte) or a paid Superprof data API (e.g. parse.bot's get_tutor_profile).
Input Parameters
| Field | Type | Required | Default | Notes |
|---|---|---|---|---|
startUrls | array | No | 4 examples (.fr / .co.uk / .es / .com.br) | Superprof search-results URLs (/s/subject,Country,City,,,,.html) on any regional domain. Plain tutor profile URLs are accepted too and scraped directly. Leave empty to use the built-in examples. |
maxItems | integer | No | 60 (10 on the free plan) | Cap on collected tutors, 1–500. |
maxPages | integer | No | 3 (1 on the free plan) | Result pages pulled per start URL from /a/search/, 1–50. |
fetchProfiles | boolean | No | false | Experimental. Visit profile pages for bio/subjects/geo — blocked by anti-bot on every tested network; keep off (the code aborts after the first block anyway). |
debugDump | boolean | No | false | Push raw API/HTML responses into the dataset for troubleshooting (leave off for normal runs). |
proxy | object | No | { "useApifyProxy": false } | Standard Apify proxy picker. Leave it off — the measured table above shows proxy-on runs get blocked. |
Free-plan runs are capped at 10 tutors and 1 page per search (APIFY_USER_IS_PAYING=1 lifts the cap).
Output Fields
Rows land in the default dataset (table view Tutors: name, city, price/h, currency, rating, reviews, subjects, bio, profile) — one row per tutor, 29 fields:
- Identity —
tutorId,name,photo,title(headline),profileUrl. - Pricing —
hourlyPriceandcurrency, inferred from the regional domain (EUR/GBP/BRL/USD/…). Prices are geo-dependent and refreshed per run;scrapedAtstamps the snapshot. - Subjects —
subjects(array) andsubjectsFromSearch: the searched subject by default (subjectsFromSearch: true); full lists come from profile pages (see the limitation section). - Reputation —
ratingandreviewCountfrom the payload'steacherRating {average,count}, plusresponseTime("in less than an hour", …). - Location —
cityanddistanceKmfrom the search cards,countryderived from the search URL,geocoordinates (profile pages — blocked). - Lesson format —
lessonOnline(webcam) andlessonInPerson(face-to-face). - Trial lesson —
freeFirstLessonandfirstFreeDuration(e.g. "1h"). - Quality signals —
verifiedboolean andbadgestring from the search payload. - Profile text —
bio(profile pages — blocked, staysnull). - Provenance —
searchUrl,sourceDomain,scrapedAton every row. - Failure diagnostics (failed runs only) —
__error,hint,diagnostics(per-request array): a blocked or empty run pushes one diagnostic record instead of tutor rows.
Example Input And Output
Example Input
$apify call ahmed_jasarevic/superprof-scraper --input-file=input.json --output-dataset
{"startUrls": [{ "url": "https://www.superprof.fr/s/maths,France,Lyon,,,,.html" }],"maxItems": 20,"maxPages": 2}
Example Output
{"tutorId": "4298123","name": "Camille R.","photo": "https://media.superprof.fr/i/a/preview/teacher-4298123.jpg","title": "Maths tutor, engineering graduate","profileUrl": "https://www.superprof.fr/camille-r.html","hourlyPrice": 35,"currency": "EUR","subjects": ["Maths"],"subjectsFromSearch": true,"rating": 4.9,"reviewCount": 127,"city": "Lyon","country": "France","distanceKm": null,"geo": null,"bio": null,"responseTime": "in less than an hour","lessonOnline": true,"lessonInPerson": true,"freeFirstLesson": true,"firstFreeDuration": "1h","verified": true,"badge": "superprof","searchUrl": "https://www.superprof.fr/s/maths,France,Lyon,,,,.html","sourceDomain": "www.superprof.fr","scrapedAt": "2026-10-08T09:24:11.000Z"}
geo, bio and distanceKm are null here (profile pages blocked, no distance on the card); the rest comes straight from the search JSON.
Integrations & Automation
- Apify API — start runs, pass input and read results over REST (
POST /v2/acts/{actorId}/runs, thenGET /v2/datasets/{datasetId}/items), or use the CLI shown above. - Webhooks — fire on run succeeded to push rows into your CRM, warehouse or Google Sheet; failed runs fire too, carrying the diagnostic record.
- Zapier & Make — Apify's official integrations trigger scenarios from this Actor's runs, so non-developers can move rows into a spreadsheet or lead database.
- Recurring schedule — a weekly run on a fixed set of city/subject search URLs is the realistic cadence for monitoring prices or a lead pool without hammering the endpoint (prices are geo-dependent, refreshed per run). Schedules also keep Store recommendation signals alive.
Related Actors
- azzouzana/superprof-scraper — the largest same-name Superprof actor on the Store (44 users); its listing publishes the "education scraper" keyword.
- abotapi/superprof-tutor-scraper — Superprof tutor scraping with price/rating/lesson-type filters and incremental mode.
- memo23/superprof-scraper — per its Store listing, Superprof across 17 country sites via the mobile app's JSON API through Apify Unblocker (this Actor uses the public
/a/search/endpoint with the proxy off). - preply-scraper — Preply tutor profiles and reviews, for the tutoring-platform comparison side of the same market.
- italki-teacher-tutor-directory-scraper — the italki "Tutor Directory Scraper", one of two same-titled Store actors cited in this niche's research.
FAQ
Is there an official Superprof API?
No. Superprof publishes no official developer API — parse.bot, which sells a paid "Superprof API" product, says the same in its own FAQ. This Actor uses the internal /a/search/ endpoint instead, reverse-engineered from the search page's XHR traffic; it is not official, and the fallbacks plus dataset diagnostics surface any change Superprof makes to it.
How do I scrape Superprof without getting blocked?
Use the internal JSON endpoint, not the HTML pages: HTML sits behind DataDome (plus AWS WAF) and returns 403 with a CAPTCHA, while /a/search/ answers plain HTTP from Apify's default network with 200 — measured live on superprof.fr and superprof.co.uk. Keep the proxy off and fetchProfiles disabled; if a run is still blocked, the dataset carries __error / hint / diagnostics instead of silent emptiness.
Do I need proxies or a browser to scrape Superprof?
No — measured runs show both hurt. This Actor is a CheerioCrawler: no Playwright, no Chrome (256 MB), proxy off. Direct HTTP returns full records from /a/search/; the datacenter proxy group hits DataDome 403, the UNBLOCKER/RESIDENTIAL groups hit AWS WAF 405 (captcha).
How much do tutors charge — and how much does private tutoring cost per hour?
The dataset answers this empirically: every row carries hourlyPrice plus currency, inferred from the regional domain (EUR on .fr, GBP on .co.uk, BRL on .com.br, USD, INR on .co.in, …). Aggregate by subjects, city or country to compare rates per market — e.g. private maths tutor price in a UK city versus an Indian one. No unverified price figures are quoted here.
Which countries and Superprof sites does this scraper support?
Any regional domain passed in startUrls; the verified set is .fr, .es, .co.uk, .com.br, .com, .ae and .co.in. The search URL's domain also determines the derived country and the inferred currency. Superprof runs many more country sites than these seven — untested domains may work, but start with the verified set.
What data can you actually get from a Superprof search results page?
Everything the search cards show — see Output Fields above for the full list: identity, hourlyPrice + currency, subjects, rating, reviewCount, city, distanceKm, responseTime, lesson flags, free-first-lesson, verified, badge, provenance. The exceptions: bio and geo need profile pages (currently blocked — keep fetchProfiles off), and __error/hint/diagnostics appear only on failed runs.
Which is cheaper, Superprof or Preply?
This Actor claims no winner — it gives you the fields to answer it: take hourlyPrice + currency rows from Superprof and from a Preply dataset, and compare like-for-like by subject, rating band and lesson type. Three comparison articles (superprof.ca, superprof.co.uk, preply.com's blog) compete for the head-to-head query — comparable structured data beats quoted numbers.
Can I get tutor emails and phone numbers for lead generation?
No. The dataset schema has no email or phone fields — only public search-result data: names, photos, profile URLs, prices, ratings, cities, badges. Lead generation here means a qualified list of tutors and profile URLs to review, not a contact list. (A competing Store actor advertises "emails (when available)"; that is not this Actor's output.)
What are the alternatives to the Superprof Scraper?
On the Apify Store: azzouzana/superprof-scraper, abotapi/superprof-tutor-scraper and memo23/superprof-scraper (see Related Actors). For the comparison side, scrape the other tutoring platforms — Preply, Wyzant and MyTutor are the recurring Superprof comparison points, with italki alternatives content ranking for the same audience. For full profile pages at scale: a paid anti-bot API (Scrapfly/Zyte) or a paid Superprof data API (e.g. parse.bot's get_tutor_profile), since profile HTML is blocked on every tested network.
How do I compare tutor prices across countries and currencies?
Set one startUrls entry per country domain — each run infers its currency from the regional site, so GBP, EUR and INR rows land in one dataset, joinable on subjects and city/country with scrapedAt stamps.
SEO Keywords
superprof scraper, superprof api, superprof tutor data, tutor directory scraper, tutor data extractor, education scraper, tutor lead generation, tutoring market research, private tutor price comparison, education marketplace data, tutor listings data, global tutor database, tutoring platforms, preply alternatives, superprof vs preply, private tutoring market, online tutoring industry, tutor pricing data, tutor hourly rate, how much do tutors charge, how much does private tutoring cost, private maths tutor price, math tutors near me, private tutoring cost uk, private math tutor rates india
For AI Agents & LLM Apps
Purpose: one run turns Superprof search URLs into tabular tutor rows (name, price, rating, location, badges) via the site's internal /a/search/ JSON endpoint — no browser, no login.
Minimal working input:
{"startUrls": [{ "url": "https://www.superprof.co.uk/s/maths,United-Kingdom,London,,,,.html" }]}
All six fields are optional (required: []); empty startUrls falls back to four built-in example searches.
Output fields (29): tutorId, name, photo, title, profileUrl, hourlyPrice, currency, subjects, subjectsFromSearch, rating, reviewCount, city, country, geo, bio, responseTime, lessonOnline, lessonInPerson, freeFirstLesson, firstFreeDuration, verified, badge, distanceKm, searchUrl, sourceDomain, scrapedAt, __error, hint, diagnostics.
Behaviors an agent should know:
- The country site — and thus
countryand the inferredcurrency— follows the domain of eachstartUrlsentry; path slugs are decoded (united-kingdom→United Kingdom). - Defaults if unset:
maxItems: 60,maxPages: 3,fetchProfiles: false,debugDump: false,proxy.useApifyProxy: false. Free plan: 10 tutors and 1 page (APIFY_USER_IS_PAYING=1lifts it). - Hard caps: 500 items, 50 pages/search, 800 requests/run, concurrency 3, 1 retry, 45 s/request.
- Leave the proxy off: direct HTTP returns
200; every tested proxy group got blocked (DataDome403/ AWS WAF405). fetchProfiles: trueadds currently-blocked profile requests:bio/geostaynull,subjectsholds only the searched subject (subjectsFromSearch: true), and the phase aborts after the first block.- Failed runs push one diagnostic row (
__error,hint,diagnostics) instead of tutor rows — read it before retrying. - An empty result page retries with minimal parameters (
adress,matiere,page) before a row is dropped.
Legal & Compliance Disclaimer
This is an independent tool. It is not affiliated with, endorsed by, sponsored by, or officially connected to Superprof (the platform operated by Superprof SAS).
The Actor reads only publicly available Superprof search-result JSON — the same data the public page renders — without login, authentication bypass or CAPTCHA solving. Profile enrichment (fetchProfiles) is off by default and blocked by anti-bot on every tested network anyway; the /a/search/ endpoint is reverse-engineered, not an official API.
You are responsible for your own compliance with Superprof's Terms of Service and applicable data-protection law. The output is personal data about identifiable tutors (names, photos, cities, profile URLs, bios where available) — especially relevant under GDPR and UK GDPR given the .fr, .es and .co.uk country sites.
The dataset contains no email addresses or phone numbers; if you combine these rows with other sources for outreach, any resulting commercial messaging must comply with applicable anti-spam and marketing law (including GDPR and ePrivacy rules).