Superprof Scraper - Tutors, Lessons, Prices & Ratings avatar

Superprof Scraper - Tutors, Lessons, Prices & Ratings

Pricing

from $1.00 / 1,000 results

Go to Apify Store
Superprof Scraper - Tutors, Lessons, Prices & Ratings

Superprof Scraper - Tutors, Lessons, Prices & Ratings

Scrape Superprof tutors by subject and location, or paste tutor URLs. One rich record per tutor: name, photo, price, rating, reviews count, subjects, city, geo, response time, lesson type and more. Filter by price, rating and lesson type.

Pricing

from $1.00 / 1,000 results

Rating

0.0

(0)

Developer

Abot API

Abot API

Maintained by Community

Actor stats

1

Bookmarked

7

Total users

1

Monthly active users

3 days ago

Last modified

Share

Superprof Scraper: Tutors, Prices, Ratings & Lesson Details

Superprof Scraper turns Superprof into a clean tutor data feed. Search by subject and location, or paste results links, and get one structured record per tutor: name, hourly price plus pack rates, average rating and review count, subjects taught, city, lesson format (webcam or face to face), response time, badges and more. A single pasted tutor link returns that tutor's profile-page fields only, since it never comes from a search result. Export to JSON, CSV or Excel, or read results straight through the API.

Why This Scraper?

  • One rich record per tutor covering price, 5h/10h pack rates, rating, review count, badge, response time, lesson format, subjects taught and profile photo.
  • Two ways to find tutors: search by subject and location, or paste tutor pages and results links directly.
  • Filters that actually narrow the search: hourly price, minimum rating, lesson format, webcam availability and free first lesson apply in search mode and to a pasted results link alike.
  • Optional per-tutor enrichment pulls city, subjects taught and the full profile description straight from each tutor's own page, billed only for tutors that are actually returned.
  • Resume a capped or interrupted run with one pasted run id, and the run survives a platform restart automatically with no duplicate tutors and no double charges.
  • Incremental mode for recurring monitoring: schedule the same search and later runs return only new and updated tutors by default (reappeared tutors need an earlier run that completed a full scan with Emit expired tutors on).
  • A refused run fails loudly instead of quietly completing with an empty, billed dataset that looks the same as a genuinely empty search.

Use Cases

  • Tutoring marketplaces and comparison sites: build a searchable directory of tutors with live pricing, ratings and availability.
  • Price and market research: track average hourly rates and pack pricing by subject and city over time.
  • Lead generation for tutoring businesses: find tutors in a subject and location with profile links ready to review.
  • Recurring monitoring: schedule the actor to catch new tutors, price changes and tutors who stop listing.

Data You Get

Sample shape: values are illustrative placeholders, not from a live listing.

FieldExample
id_annonce"10000001"
teacherName"Jane Doe"
title"Personalized math lessons for all levels"
url"https://www.superprof.com/sample-tutor-headline.html"
price / price_1H30 / 30
teacherCity / city"New York" / "New York"
country"US"
lat / lng40.712800 / -74.006000
subjects["Mathematics", "Algebra", "Statistics"]
badge / is_ambassador"Ambassador" / true
stat_stars / stat_count_reviews5 / 120
offer_lesson_first_is_free / offer_lesson_first_lesson_durationtrue / "0hr30"
price_5H / price_10H / price_webcam100 / 200 / 30
webcam / faceToFacetrue / false
responseTimeDesc / response_time_sec"Responds within 1 hour" / 3600
levels["All Levels"]
languages / native_language["English"] / "English"
status"Ambassador"
stat_count_recommendations15
interview / has_interview[{"question": "1) When did you start tutoring?", "answer": "..."}] / true
reviews[{"author": "Sam", "text": "Great tutor, very patient."}]
gallery["https://example.com/photo.jpg"]
teacherPhoto"https://example.com/photo.jpg"
search_url"https://www.superprof.com/s/mathematics,New-York,,,,.html"

Every record also carries the raw source leaves the fields above summarize (teacherRating, rating_score/rating_count/rating_label, offers, teacherId, key, sex, is_superprof, is_verified_member, has_valid_diploma, has_video/video, experience, teaching, venue_can_move/venue_can_receive, searchMode, sourceUrl, scrapedAt and more) so nothing the source exposes is lost. subjects, country, pack rates (price_5H, price_10H, price_webcam), levels, languages, native_language, experience, teaching, interview/has_interview, stat_count_recommendations and the review list are filled from the tutor's own profile page and are only present when Fetch full tutor profiles is on (it is, by default); city, gallery and status fall back to search-result values when it's off. A single pasted tutor link always reads the profile page regardless of that toggle, but returns only profile-page fields; the search-result-only fields (name, rating, badge, response time, webcam/in-person flags) are empty for a pasted tutor link, since it never comes from a search result. A handful of contact/CV fields (contact_label, contact_url, emails, cv, department, creation_date) are always present on the record shape but not currently populated by the extractor, so they read as empty on every run. In incremental mode, records also carry changeType, changedFields, firstSeenAt and lastSeenAt; an EXPIRED row repeats the tutor's last known field values with changeType set to "EXPIRED".

How to Use

  1. Pick a mode: search (by subject and location) or url (paste tutor or results links).
  2. In search mode, list one or more subjects and locations; in url mode, paste the links. Set the price, rating, lesson-format, webcam and free-first-lesson filters you want; they apply in both modes, except to a single pasted tutor page.
  3. Set Max items (and, if you want a page-count safety net, Max pages) to control run size and cost, then click Start.
  4. Download the dataset as JSON, CSV or Excel, or read it through the API.

Search a subject in a location:

{
"mode": "search",
"subjects": ["Mathematics"],
"locations": ["New York"],
"maxItems": 20
}

Filtered search for online lessons:

{
"mode": "search",
"subjects": ["Guitar"],
"locations": ["London"],
"lessonType": "online",
"minRating": 4,
"maxPrice": 40,
"onlyFirstLessonFree": true,
"maxItems": 50
}

Scrape specific URLs:

{
"mode": "url",
"urls": [
"https://www.superprof.com/s/mathematics,United-States,,,,.html",
"https://www.superprof.com/sample-tutor-headline.html"
],
"fetchDetails": true
}

Monitor a search on a schedule and get only what changed:

{
"mode": "search",
"subjects": ["Mathematics"],
"locations": ["New York"],
"incrementalMode": true,
"emitExpired": true,
"maxItems": 0
}

Run it from your code

Python:

from apify_client import ApifyClient
client = ApifyClient("<YOUR_APIFY_TOKEN>")
run = client.actor("abotapi/superprof-tutor-scraper").call(run_input={
"mode": "search", "subjects": ["Mathematics"], "locations": ["New York"], "maxItems": 20
})
for tutor in client.dataset(run["defaultDatasetId"]).iterate_items():
print(tutor["teacherName"], tutor["price"])

JavaScript:

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: '<YOUR_APIFY_TOKEN>' });
const run = await client.actor('abotapi/superprof-tutor-scraper').call({
mode: 'search', subjects: ['Mathematics'], locations: ['New York'], maxItems: 20,
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();

Or connect it to Make, Zapier, n8n, Google Sheets or webhooks from the Integrations tab.

How Max items and Max pages shape a run

Max items is the single overall cap on tutors collected across the whole run (0 means unlimited); when several subjects and locations are combined, the cap is split evenly across each subject/location pair so one search cannot use up the whole budget before the others start. Max pages is a separate, optional safety ceiling on how many result pages a single search walks; it never caps the number of tutors returned, only how far one search is allowed to page before stopping.

Resume and recurring updates

Two different features, both optional:

  • Resume (resumeFromRunId): continue ONE specific interrupted or capped run. Paste a previous run id or dataset id and this run returns only tutors it did not already collect. The run also checkpoints its own progress automatically, so a platform restart resumes it without any input from you, with no duplicate tutors and no double charges.

  • Incremental mode (incrementalMode): for scheduling this actor again and again against the SAME search or URL set. The actor remembers its own state; no run id to paste. Every tutor is classified:

    • NEW: never tracked before.
    • UPDATED: a comparable field changed since last time; changedFields names exactly which.
    • UNCHANGED: nothing changed. Suppressed and not billed by default; turn on Emit unchanged tutors to also get (and be billed for) these rows.
    • REAPPEARED: was marked EXPIRED in a previous run and is back.
    • EXPIRED: was tracked before and is no longer found. Only ever produced after a run that proved a complete, uncapped scan of the tracked search or URL set, with no Resume used; if Max items or Max pages cut the run short, or Resume seeded it, expiry detection is skipped for that run and last run's state is kept as is. Off by default; turn on Emit expired tutors to also get (and be billed for) these rows.

    By default (both toggles off) a recurring run returns only NEW and UPDATED tutors. REAPPEARED only appears once an earlier run had Emit expired tutors on and completed a full, uncapped, non-resumed scan and marked a tutor EXPIRED. State is scoped automatically to the search/URL and filter combination you use; State key lets you name a campaign explicitly, or deliberately share state across differently configured runs.

Send results into your apps (MCP connectors)

Connect one or more MCP servers to push the scraped tutors straight into your tools after a run finishes. Set mcpConnectors to the servers you want (Notion, Linear, Airtable, Apify). For Notion, also set notionParentPageUrl to the page under which a results database is created, and use maxNotifyListings to cap how many tutors are sent. The export is a side channel: it never changes or blocks the dataset output.

  1. Authorize a connector once under Apify > Settings > Integrations (Notion, Linear, Airtable, or Apify).
  2. Select it in the "Export to your apps (MCP)" input field. (If the picker is empty, you haven't authorized a connector yet.)
  3. For Notion, also set notionParentPageUrl to the page where records should be created.

The connection is mediated by Apify's MCP proxy, so this actor never sees your third-party credentials. Leave the field empty to skip.

Input Parameters

ParameterTypeDefaultDescription
modeselectsearchsearch for subject/location searches, url to scrape pasted URLs.
subjectsarrayno default (prefill: ["Mathematics"])Subjects to search, e.g. "Mathematics", "Guitar". Search mode only.
locationsarrayno default (prefill: ["United States"])Places to search, e.g. "New York". Empty means country-wide. Search mode only.
urlsarrayno default (prefill: sample results URL)Tutor page URLs or results URLs to scrape. URL mode only.
lessonTypeselectanyRestrict to any, online or face_to_face. Applies in search mode and to a pasted results URL; does not narrow a single pasted tutor page.
minPriceintegerno defaultOnly tutors charging at least this much per hour.
maxPriceintegerno defaultOnly tutors charging at most this much per hour.
minRatingintegerno defaultOnly tutors with an average rating at or above this value (1 to 5).
onlyWebcambooleanfalseOnly tutors who offer lessons by webcam.
onlyFirstLessonFreebooleanfalseOnly tutors who offer a free first lesson.
sortByselectrelevanceResult order: relevance or distance.
fetchDetailsbooleantrueAdds city, subjects taught and the full description from the tutor's own profile page.
maxPagesinteger0Safety ceiling on result pages per search. 0 is unlimited; does not cap items.
maxItemsinteger20Maximum tutors collected across the whole run. 0 is unlimited.
resumeFromRunIdstringno defaultPaste a previous run id (or its dataset id) to continue that run: tutors already collected there are skipped.
incrementalModebooleanfalseTurn on for recurring/scheduled monitoring of the same search or URL set.
stateKeystringno defaultOptional. Name a monitoring campaign, or deliberately share state across differently configured runs.
emitUnchangedbooleanfalseIncremental mode only. Also return (and bill) tutors unchanged since the last run.
emitExpiredbooleanfalseIncremental mode only. Also return (and bill) tutors no longer found, after a complete scan.
proxyobject{"useApifyProxy": true, "apifyProxyGroups": ["RESIDENTIAL"]}Connection settings.
mcpConnectorsarrayno defaultOptional MCP servers (Notion, Linear, Airtable, Apify) to receive the results.
notionParentPageUrlstringno defaultOptional Notion page URL under which a results database is created.
maxNotifyListingsintegerno defaultOptional cap on how many tutors are pushed to the connected apps.

Output Example

Sample shape: values are illustrative placeholders, not from a live listing.

{
"id_annonce": "10000001",
"teacherName": "Jane Doe",
"title": "Personalized math lessons for all levels",
"url": "https://www.superprof.com/sample-tutor-headline.html",
"landing_url": "https://www.superprof.com/s/mathematics,United-States,,,,.html",
"teacherPhoto": "https://example.com/photo.jpg",
"price": 30,
"price_1H": 30,
"prices": { "hourly": 30, "firstHour": 30, "currency_hint": null },
"teacherCity": "New York",
"city": "New York",
"country": "US",
"lat": 40.7128,
"lng": -74.006,
"subjects": ["Mathematics", "Algebra", "Statistics"],
"subjects_raw": ["Mathematics", "Algebra", "Statistics"],
"badge": "Ambassador",
"is_ambassador": true,
"is_available": true,
"search_url": "https://www.superprof.com/s/mathematics,New-York,,,,.html",
"sex": "female",
"is_superprof": true,
"is_verified_member": true,
"stat_count_reviews": 120,
"stat_stars": 5,
"response_time_sec": 3600,
"offer_lesson_first_is_free": true,
"offer_lesson_first_lesson_duration": "0hr30",
"stat_count_recommendations": 15,
"status": "Ambassador",
"price_5H": 100,
"price_10H": 200,
"price_webcam": 30,
"price_with_travel": null,
"offers": [
{ "type": "hourly", "price": 30 },
{ "type": "pack_5h", "price": 100 },
{ "type": "pack_10h", "price": 200 },
{ "type": "webcam", "price": 30 }
],
"levels": ["All Levels"],
"has_all_levels": true,
"native_language": "English",
"languages": ["English"],
"experience": "Sample tutor bio placeholder.",
"teaching": "Sample lesson approach placeholder.",
"explications": "Sample lesson approach placeholder.",
"interview": [{ "question": "1) When did you start tutoring?", "answer": "Sample answer placeholder." }],
"has_interview": true,
"video": null,
"has_video": false,
"gallery": ["https://example.com/photo.jpg"],
"reviews": [{ "author": "Sam", "text": "Great tutor, very patient." }],
"has_valid_diploma": true,
"venue_can_move": false,
"venue_can_receive": false,
"venue_can_receive_individually": false,
"venue_can_receive_several_students": false,
"venue_max_distance": null,
"creation_date": null,
"update_date": "2026-02-23T09:41:38Z",
"contact_label": null,
"contact_url": null,
"emails": [],
"cv": null,
"department": null,
"teacherId": "20000001",
"key": "a1b2c3d4",
"webcam": true,
"faceToFace": false,
"responseTimeDesc": "Responds within 1 hour",
"description": "Sample tutor bio placeholder.",
"searchMode": "search",
"sourceUrl": "https://www.superprof.com/sample-tutor-headline.html",
"scrapedAt": "2026-01-01T00:00:00+00:00"
}

Plan Requirement

The default proxy setting works out of the box, and the actor automatically switches to a different connection when one is refused, so you do not need to tune anything for a typical run. If Apify Proxy access is not available on your plan, the actor logs a clear warning and still attempts the run; results may be less reliable in that case. For large or frequent runs, keeping the default Residential proxy group gives the most reliable results.

FAQ

How much does it cost?

You pay per tutor record returned, plus a small per-run start fee, with the per-tutor profile enrichment billed only when it is switched on and a tutor is actually returned. The Pricing tab shows the current rates. Use Max items to cap the cost of any run.

This actor collects only publicly available tutor listing data. You are responsible for how you use it: follow Superprof's terms and the laws that apply to you, and get legal advice if you plan commercial redistribution. Contact details and personal profile content may be subject to additional privacy obligations in your jurisdiction.

Can I get only new or changed tutors on a schedule?

Yes. Schedule the actor from the Schedules tab and turn on Incremental mode. Each run then returns only new and updated tutors, and unchanged ones are not billed unless you opt in. Reappeared and expired tutors only appear once an earlier run had Emit expired tutors on and completed a full scan.

Why do minPrice, maxPrice and the other filters apply even in URL mode?

A pasted results URL is re-queried through the same search feed as search mode, so every filter you set (price, rating, lesson format, webcam, free first lesson) is sent along with it and narrows the results exactly as it would in search mode. The one exception is a single pasted tutor page: it always returns that one tutor, unfiltered.

Why did my run fail instead of returning an empty dataset?

If the connection is refused before any page can be read, or every request during the run is rejected with nothing getting through, the run stops with a clear error message instead of completing with zero tutors, so "nothing matched" is never confused with "nothing could be read". A genuinely empty search (the connection worked, but no tutors matched) still succeeds normally with an empty dataset and a status message explaining why.

Can I use it with AI agents or MCP?

Yes. Call it from any Apify integration or MCP client, and use the connector field to push results into Notion, Linear or Airtable.

πŸ”— Want more jobs data?

Pair this actor with these related scrapers from the same team:

🏷️ Kijiji.ca Scraper
Scrape Kijiji.ca listings across property, vehicles, jobs, electronics, furniture...
🏷️ FINN.no Jobs Scraper
Scrape active FINN.no job listings by search filters or URL. Extract 30+ fields including...
πŸ›’ Flippa Scraper
From $0.80/1K. Scrape Flippa listings with full enrichment, including revenue, profit...
πŸ’Ό Cwjobs UK
From $1/1k. Scrape tech and IT jobs from CWJobs.co.uk into clean, structured data. Search...
πŸ“‡ ThomasNet Scraper
Scrape ThomasNet suppliers and manufacturers by keyword, category, location...
πŸ›’ ProductReview.com.au Scraper
Scrape ProductReview.com.au products, businesses and customer reviews. Search by...

πŸ‘‰ Browse all abotapi scrapers

πŸ’¬ Support

  • 🐞 Found a bug or a missing field? Open a ticket on the Issues tab. We usually reply within hours.
  • πŸ› οΈ Need another site, extra fields or a private build? Email contact@abotapi.com.
  • ⭐ Enjoying it? A quick review on the actor page helps other users find it.