Skip to content
    ↑↓ to choose · Enter to open

    · 11 min read

    Preply Tutor Profiles Scraper: 21 Data Fields per Record (2026)

    By CrawlerBros Engineering Team

    Each tutor record yields 21 fields, including hourly rates, review counts, completed lesson numbers, and response rates. At $5.00 per 1,000 results on the free plan, you can query across 35 supported languages using structured filters for certifications, subjects, and availability. It serves researchers benchmarking educator rates or auditing language learning supply, but it is not for teams seeking private tutor emails or telephone numbers, which the scraper does not output.

    Try it: open Preply Tutor Profiles Scraper on Apify, sign in on the free plan and run the prefilled example.

    Can you try Preply Tutor Profiles Scraper before paying?

    Yes. Apify's free plan includes $5.00 of prepaid usage every month and asks for no credit card. At $0.005 per result, that covers up to 1,000 results of Preply Tutor Profiles Scraper a month, before run-start charges and platform usage.

    Preply Tutor Profiles Scraper was last updated on 2026-05-26. It is one of 1,725 Actors CrawlerBros publishes on Apify, which together have 680,173 lifetime public runs and an average rating of 4.63 out of 5 across 416 reviews.

    What does it cost to run Preply Tutor Profiles Scraper?

    Each result costs $0.005 on Apify's free plan, which is $5.00 per 1,000 results. Starting a run is charged separately at $0.005 per GB of Actor memory. Apify also bills the platform usage each run consumes, at the rates of your Apify plan, on top of these charges.

    Apify plan Per result Per 1,000 results
    FREE $0.005 $5.00
    BRONZE $0.00433 $4.33
    SILVER $0.00367 $3.67
    GOLD $0.003 $3.00
    PLATINUM $0.003 $3.00
    DIAMOND $0.003 $3.00

    The maxItems setting controls your result bill directly, as billing scales strictly with records written to your dataset. The most economical approach is to run a preliminary query capped at 10 items to confirm filter accuracy before requesting hundreds of records.

    How do you run Preply Tutor Profiles Scraper from the API?

    The schema marks 1 of its 15 controls as required: mode. The payload below uses the schema's own prefilled values, so it runs as written once you substitute your API token.

    Call the synchronous endpoint to start a run and receive dataset items in one request:

    curl -X POST "https://api.apify.com/v2/acts/crawlerbros~preply-scraper/run-sync-get-dataset-items?token=$APIFY_TOKEN" \
      -H "Content-Type: application/json" \
      -d '{"mode":"searchTutors"}'
    

    The same run from Python, using the official client:

    from apify_client import ApifyClient
    
    client = ApifyClient("<YOUR_APIFY_TOKEN>")
    
    run_input = {
      "mode": "searchTutors"
    }
    
    run = client.actor("crawlerbros~preply-scraper").call(run_input=run_input)
    
    for item in client.dataset(run["defaultDatasetId"]).iterate_items():
        print(item)
    

    And from Node.js:

    import { ApifyClient } from 'apify-client'
    
    const client = new ApifyClient({ token: '<YOUR_APIFY_TOKEN>' })
    
    const input = {
      "mode": "searchTutors"
    }
    
    const run = await client.actor('crawlerbros~preply-scraper').call(input)
    const { items } = await client.dataset(run.defaultDatasetId).listItems()
    console.log(items)
    

    The synchronous endpoint holds the connection open until the run finishes, which is convenient for small batches and wrong for large ones. For anything long running, start the run asynchronously and poll, or attach a webhook, so a dropped connection does not cost you the results.

    Which Preply Tutor Profiles Scraper inputs matter, and which can you skip?

    The mode selector and language settings define what records populate your dataset. Keep advanced filters like tutorCountry and availabilityDay empty on initial runs until you verify baseline volume.

    • mode (string): What to fetch: search tutors by language/filters, or retrieve specific tutor profiles by URL or ID. Default: "searchTutors".
    • language (string): Language to search tutors for (mode=searchTutors). Default: "spanish".
    • startUrls (array): List of Preply tutor profile URLs (e.g. https://preply.com/en/tutor/12345). Used in mode=getTutor. Default: [].
    • tutorIds (array): List of Preply tutor numeric IDs. Used in mode=getTutor. Default: [].
    • subject (string): Optional subject or specialty to filter tutors (e.g. 'Business English', 'IELTS', 'Conversation').
    • sortBy (string): How to order search results. Default: "popularity".
    • minPrice (number): Only return tutors with hourly rate at or above this value.
    • maxPrice (number): Only return tutors with hourly rate at or below this value.
    • minRating (number): Only return tutors with average rating at or above this value (0-5).
    • nativeOnly (boolean): If true, only return tutors who are native speakers of the selected language. Default: false.
    • proOnly (boolean): If true, only return certified/professional tutors. Default: false.
    • tutorCountry (string): Optional comma-separated ISO country codes to filter tutors by their country (e.g. 'US', 'GB,US,CA').

    The other 3 controls, with their defaults, are listed in the input schema on Preply Tutor Profiles Scraper on Apify.

    Fixed-choice controls: mode accepts searchTutors (Search tutors by language and filters), getTutor (Get tutor profiles by URL or ID); language accepts 35 values (default spanish), including spanish, english, french, german; sortBy accepts popularity (Most popular), rating (Highest rated), reviews (Most reviewed), price_lowest (Lowest price first), price_highest (Highest price first).

    What does Preply Tutor Profiles Scraper return?

    Returned records give you structured marketplace metrics like hourlyRate, totalLessons, rating, and specialties. They do not contain private contact details, payment information, or direct student messages.

    • tutorId: Unique Preply tutor identifier
    • name: Tutor's display name
    • bio: Tutor's self-description
    • country: Tutor's country of origin
    • nativeLanguage: Tutor's native language
    • languagesTaught: List of languages this tutor teaches
    • specialties: Specializations (e.g. Business English, IELTS, Conversation)
    • hourlyRate: Price per hour in USD
    • currency: Pricing currency
    • rating: Average student rating (0-5)
    • reviewCount: Total number of student reviews
    • totalLessons: Number of lessons completed
    • responseRate: Tutor's message response rate (e.g. "98%")
    • profileUrl: Direct link to tutor's Preply profile
    • avatarUrl: Profile photo URL
    • videoUrl: Introduction video URL
    • isPro: Whether the tutor is certified/professional
    • education: Educational background (detail mode)
    • certificates: Teaching certificates (detail mode)
    • recordType: Always "tutor"
    • scrapedAt: ISO 8601 timestamp of extraction

    These are the documented fields. Optional ones can be empty on a given record, so measure how often each field your deliverable depends on is populated across a real sample before automating the handoff.

    How do you build the workflow end to end?

    Open Preply Tutor Profiles Scraper and work through these in order. Each step ends with something to check, so a bad configuration surfaces on a small run rather than a scheduled one.

    1. Run mode set to searchTutors with language set to spanish and maxItems capped at 5.
    2. Verify that each item in the returned dataset includes hourlyRate, rating, and tutorId.
    3. Inspect the currency field to confirm that rates are expressed in your expected pricing unit.
    4. If you require certified credentials, re-run with proOnly set to true or test mode getTutor using a populated tutorIds array.
    5. Inspect the education and certificates fields on the detail records to verify that credential history populated as expected.
    6. Widen maxItems toward your production target or iterate across multiple language values on a schedule.

    How do you apply it? Three worked playbooks

    These are Preply Tutor Profiles Scraper's own documented use cases, each worked through as an operating pattern rather than a description.

    Use case 1: Market Research

    Outcome: Analyze tutor pricing, ratings, and availability across languages

    Configure: Set mode to searchTutors, language to spanish, sortBy to popularity, and maxItems to 100.

    Working method: Execute a baseline extraction for one language, verify distribution across hourlyRate and totalLessons, and repeat across target languages to compare price spreads.

    Deliverable: A consolidated dataset of tutor profiles showing pricing tiers and rating medians by language.

    Stop condition: Stop if more than 10% of returned records lack hourlyRate or reviewCount values.

    Use case 2: Competitive Analysis

    Outcome: Compare tutor profiles across online tutoring platforms

    Configure: Set mode to searchTutors, subject to Business English, proOnly to true, and maxItems to 50.

    Working method: Extract verified professional profiles matching specific subject niches, then benchmark hourly rates and total lessons against competing platform directories.

    Deliverable: A structured comparison matrix mapping tutor experience and rates for specific professional subjects.

    Stop condition: Abort if returned profiles do not reflect the proOnly filter flag.

    Use case 3: Education Insights

    Outcome: Track trends in language learning demand and tutor supply

    Configure: Set mode to getTutor and supply known IDs in tutorIds with useProxy enabled.

    Working method: Query a fixed panel of tutor IDs weekly, monitoring shifts in reviewCount, responseRate, and hourlyRate over time.

    Deliverable: A longitudinal tracking table recording changes in individual tutor lesson volumes and pricing adjustments.

    Stop condition: Halt if tutorIds lookups return HTTP 404 responses or empty profile objects repeatedly.

    What breaks, and how do you design around it?

    Cloudflare protection on Preply requires residential proxy usage, so leave useProxy set to true to prevent blocking. To collect credentials or education records, switch from directory search to getTutor mode using specific profile identifiers.

    When should you not use Preply Tutor Profiles Scraper?

    Do not use this Actor if your target platform is not Preply. If your analysis centers on US K-12 academic subjects rather than global language tutoring, Wyzant Tutors Scraper provides marketplace coverage designed around domestic curriculum specialties. Similarly, if your study requires comparative supply data from another leading language exchange, use italki Tutor Profiles & Languages Scraper. Finally, avoid this Actor entirely if your workflow requires direct teacher contact information, as Preply's directory does not expose private communication channels.

    What should you check before trusting the output?

    • Check that hourlyRate contains a positive numeric value rather than null or 0.
    • Assert that rating falls within the documented range of 0 to 5.
    • Verify that languagesTaught is a non-empty array for every extracted tutor record.
    • Halt the run if consecutive records arrive with empty tutorId or missing profileUrl values.

    None of this proves a record is correct. It gives a scheduled Preply Tutor Profiles Scraper run defined points where it should stop instead of quietly passing bad data downstream.

    Frequently asked questions

    What does it cost to scrape 1,000 Preply tutor profiles?

    On Apify's free plan, extracting 1,000 tutor results costs $5.00 based on the $0.005 per-result charge. Memory usage and run starts are billed separately on top of these dataset result charges.

    How do searchTutors and getTutor modes differ?

    The searchTutors mode queries directory listings by language, price, and rating. The getTutor mode takes specific profile URLs or numeric IDs to retrieve full profile data, including education and certificates.

    Does this Actor extract tutor email addresses or phone numbers?

    No. The scraper only extracts publicly visible marketplace data such as names, bios, rates, lesson counts, and reviews. Private student and tutor contact channels are not exposed.

    Can I filter tutors by specific days of the week?

    Yes. The availabilityDay control accepts individual weekdays like mon, wed, or fri to filter search results down to educators who have open lesson slots on those specific days.

    Why is the useProxy option enabled by default?

    Preply uses Cloudflare protection to monitor traffic. Keeping useProxy set to true routes requests through residential proxies to maintain reliable extraction without being blocked.

    Where to go next

    When you are ready to run it, open Preply Tutor Profiles Scraper on Apify; the free plan covers up to 1,000 results a month.

    Start with the Preply Tutor Profiles Scraper Actor page for the current input schema, pricing tier, and run history.

    Other Actors we maintain for related data:

    Related guides:

    Resources

    • Actor documentation, input schema, and pricing: verified against the published Actor on 2026-09-27.

    • Actor last updated by its maintainers on 2026-05-26.

    • Run outcome figures cover the 30 day public window ending 2026-09-27.

    • Preply Tutor Profiles Scraper on Apify

    Featured actors

    Preply Tutor Profiles Scraper

    Scrape Preply tutor profiles, search tutors by language, subject, price, and rating. Get name, country, hourly rate, rating, reviews, lessons count, bio, avatar, and more. Supports bulk tutor lookups by URL or ID.

    Run on Apify ↗