Superprof Scraper $1π° Tutors, Lessons, Prices & Ratings
Pricing
from $1.00 / 1,000 results
Superprof Scraper $1π° Tutors, Lessons, Prices & Ratings
From $1/1K. 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
Maintained by CommunityActor stats
0
Bookmarked
5
Total users
1
Monthly active users
11 days ago
Last modified
Categories
Share
Superprof Tutor Scraper
Collect private tutors and their lesson listings from Superprof at scale. Search by subject and location, or paste tutor and results URLs, and get one clean, structured record per tutor: name, photo, hourly price, average rating and review count, subjects taught, city, lesson type, response time and more.
Why This Scraper?
- One rich record per tutor with name, price, rating, reviews count, badge, response time, lesson type and photo variants.
- Dual input: search by subject and location, or paste specific tutor pages and results URLs.
- Filter by hourly price, minimum rating, lesson type, webcam availability and free first lesson.
- No artificial page ceiling by default, just one overall item cap; set
maxPagesif you want a safety limit instead. - Resume an interrupted full-catalogue run with
resumeFromRunId, and the run survives a platform migration or Resurrect automatically -- no duplicate tutors, no double charges. - Incremental & dedup mode for recurring/scheduled monitoring: turn on
incrementalModeand the actor remembers the previous run of the same search itself, returning only NEW, UPDATED and REAPPEARED tutors by default (EXPIRED and UNCHANGED are opt-in, and both bill extra rows). - Optional per-tutor enrichment adds city, subjects taught and the full description.
- Push results straight into Notion, Linear, Airtable or Apify through MCP connectors.
- Runs on any Apify plan, including the free tier.
Data You Get
Sample shape: values are illustrative placeholders, not from a live listing.
| Field | Example |
|---|---|
| id_annonce | "0000000" |
| teacherName | "Jane Doe" |
| title | "Personalized math lessons for all levels" |
| url | "https://www.superprof.com/sample-tutor-headline.html" |
| price | 30 |
| price_1H | 30 |
| type | "webcam" |
| teacherCity | "New York" |
| city | "New York" |
| country | "US" |
| lat | 40.712800 |
| lng | -74.006000 |
| rating_score | 5 |
| rating_count | 120 |
| rating_label | "120 reviews" |
| badge | "Ambassador" |
| is_ambassador | true |
| subjects | ["Mathematics", "Physics"] |
| firstHourFree | 1 |
| firstFreeDuration | "0hr30" |
| offer_lesson_first_is_free | true |
| price_5H | 100 |
| price_10H | 200 |
| price_webcam | 30 |
| offers | [{"type": "hourly", "price": 30}] |
| stat_stars | 5 |
| stat_count_reviews | 120 |
| stat_count_recommendations | 15 |
| status | "Ambassador" |
| is_superprof | true |
| is_verified_member | true |
| has_valid_diploma | true |
| has_video | true |
| video | "https://www.youtube.com/watch?v=XXXXXXXXXXX" |
| has_interview | true |
| interview | [{"question": "1) ...", "answer": "..."}] |
| levels | ["All Levels"] |
| has_all_levels | true |
| native_language | "English" |
| languages | ["English"] |
| experience | "Hi, I'm Jane ..." |
| teaching | "I teach algebra ..." |
| reviews | [{"author": "Sam", "text": "Great tutor!"}] |
| gallery | ["https://example.com/photo.jpg"] |
| venue_can_move | false |
| venue_can_receive | true |
| sex | "female" |
| responseTimeDesc | "Responds within 5 hours" |
| response_time_sec | 18000 |
| webcam | true |
| faceToFace | false |
| teacherPhoto | "https://example.com/photo.jpg" |
| search_url | "https://www.superprof.com/s/mathematics,New-York,,,,.html" |
How to Use
Search a subject in a location:
{"mode": "search","subjects": ["Mathematics"],"locations": ["New York"],"maxItems": 20}
Search with filters:
{"mode": "search","subjects": ["Guitar"],"locations": ["London"],"lessonType": "online","minRating": 5,"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 daily and get only what changed:
{"mode": "search","subjects": ["Mathematics"],"locations": ["New York"],"incrementalMode": true,"emitExpired": true,"maxItems": 0}
Resume and recurring updates
Two different features, both optional:
-
Resume (
resumeFromRunId): continue ONE specific interrupted run or full-catalogue pull. Paste a previous run id or dataset id and this run returns only tutors it did not already collect. Use it once, after an interruption or a large capped-off pull. -
Incremental mode (
incrementalMode): for scheduling this actor to run again and again against the SAME search or URL set (e.g. daily). The actor remembers its own state -- no run id to paste. Every tutor is classified:NEW-- never seen before.UPDATED-- a comparable field changed since last time;changedFieldsnames exactly which.UNCHANGED-- nothing changed. Suppressed by default; turn onemitUnchangedto also get these rows (and be billed for them).REAPPEARED-- was marked EXPIRED before, and is back.EXPIRED-- was tracked before and is no longer found. Only ever produced after a run that proved a complete scan of the tracked search or URL set (nomaxItems/maxPagescap hit, and noresumeFromRunId). Off by default; turn onemitExpiredto get these rows (and be billed for them).
By default (both toggles off) a recurring run returns only
NEW,UPDATEDandREAPPEAREDtutors -- exactly what changed. State is scoped automatically to the search/URL and filter combination you use (stateKeylets you name a campaign explicitly, or deliberately share state across differently-configured runs).incrementalModeandresumeFromRunIdcan combine to bootstrap: the first incremental run for a search can also resume from a prior plain run, seeding the new baseline from it. Once a baseline exists for astateKey, addingresumeFromRunIdon a later run fails fast with a clear message instead of silently guessing.
Input Parameters
| Parameter | Type | Description |
|---|---|---|
| mode | select | "search" for subject/location searches, "url" to scrape pasted URLs. |
| subjects | array | Subjects to search, e.g. "Mathematics", "Guitar". Search mode only. |
| locations | array | Places to search, e.g. "New York". Empty means country-wide. Search mode only. |
| lessonType | select | Restrict to "any", "online" or "face_to_face". |
| minPrice | integer | Only tutors charging at least this much per hour. |
| maxPrice | integer | Only tutors charging at most this much per hour. |
| minRating | integer | Only tutors with an average rating at or above this value (1 to 5). |
| onlyWebcam | boolean | Only tutors who offer lessons by webcam. |
| onlyFirstLessonFree | boolean | Only tutors who offer a free first lesson. |
| sortBy | select | Result order: "relevance" or "distance". |
| urls | array | Tutor page URLs or results URLs to scrape. URL mode only. |
| fetchDetails | boolean | Adds city, subjects taught and the full description from the tutor's profile. |
| maxPages | integer | Safety ceiling on result pages per search. 0 (default) is unlimited -- the walk continues until the source's own page count is reached. Does not cap items. |
| maxItems | integer | Maximum tutors collected across the whole run. The single overall limit. 0 is unlimited. |
| resumeFromRunId | string | Paste a previous run id (or its dataset id) to continue that run: tutors already collected there are skipped, so this run only returns new tutors (a delta). Leave empty for a normal run. |
| incrementalMode | boolean | Turn on for recurring/scheduled monitoring of the same search or URL set. Returns NEW/UPDATED/REAPPEARED by default; see "Resume and recurring updates" above. |
| stateKey | string | Optional. Name a monitoring campaign to keep its state stable, or to deliberately share state across differently-configured runs. Auto-derived from the search/URL/filter setup when left empty. |
| emitUnchanged | boolean | Incremental mode only. Also return (and bill) tutors unchanged since the last run, marked UNCHANGED. Off by default. |
| emitExpired | boolean | Incremental mode only. Also return (and bill) tutors no longer found, marked EXPIRED -- only after a complete scan. Off by default. |
| proxy | object | Connection settings. The default works on every plan. |
| mcpConnectors | array | Optional MCP servers (Notion, Linear, Airtable, Apify) to receive the results. |
| notionParentPageUrl | string | Optional Notion page URL under which a results database is created. |
| maxNotifyListings | integer | Optional 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": "0000000","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","type": "webcam","price": 30,"price_1H": 30,"prices": { "hourly": 30, "firstHour": 30, "currency_hint": null },"teacherCity": "New York","city": "New York","country": "US","lat": 40.712800,"lng": -74.006000,"subjects": ["Mathematics", "Physics"],"badge": "Ambassador","is_ambassador": true,"is_available": true,"teacherId": "00000000","teacherPhoto": "https://example.com/photo.jpg","teacherRating": { "average": 5, "count": 120, "label": "120 reviews" },"rating_score": 5,"rating_count": 120,"rating_label": "120 reviews","firstHourFree": 1,"firstFreeDuration": "0hr30","offer_lesson_first_is_free": true,"price_5H": 100,"price_10H": 200,"price_webcam": 30,"offers": [{ "type": "hourly", "price": 30 }, { "type": "pack_5h", "price": 100 }],"stat_stars": 5,"stat_count_reviews": 120,"stat_count_recommendations": 15,"status": "Ambassador","is_superprof": true,"is_verified_member": true,"has_valid_diploma": true,"has_video": true,"video": "https://www.youtube.com/watch?v=XXXXXXXXXXX","has_interview": true,"interview": [{ "question": "1) When did you start tutoring?", "answer": "..." }],"levels": ["All Levels"],"has_all_levels": true,"native_language": "English","languages": ["English"],"experience": "Hi, I'm Jane ...","teaching": "I teach algebra ...","reviews": [{ "author": "Sam", "text": "Great tutor!" }],"gallery": ["https://example.com/photo.jpg"],"venue_can_move": false,"venue_can_receive": true,"sex": "female","is_feminin": 1,"verified": 1,"webcam": true,"faceToFace": false,"responseTime": 5,"responseTimeDesc": "Responds within 5 hours","response_time_sec": 18000,"search_url": "https://www.superprof.com/s/mathematics,New-York,,,,.html","description": "Sample description placeholder.","scrapedAt": "2026-01-01T00:00:00+00:00"}
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, 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.
Connection and proxy
The only connection setting you control is the standard Proxy object. Everything else is handled automatically. There are no extra proxy tuning fields to set.
- Defaults that just work. The default proxy setting enables Apify Proxy and is recommended for the most reliable results. You can leave it as is.
- Automatic IP handling. Each request uses a fresh exit IP, and a failing exit is replaced automatically, so a single bad IP does not stall the run.
- Cost stays bounded. The actor keeps connection usage within a sensible internal budget for the run, so a large run cannot run up unbounded proxy cost.
- Runs without paid proxy. If Apify Proxy access is not available, the actor logs a clear message and still completes the run; results may be less reliable.
- Survives interruption. The run periodically checkpoints its progress, so if the platform restarts it (a server migration, or you use Resurrect) it picks up where it left off instead of starting over: no duplicate tutors and no double charges. No input is needed for this; it is automatic.
Plan Requirement
This actor runs on any Apify plan, including the free tier.