Airbnb Experiences Scraper avatar

Airbnb Experiences Scraper

Pricing

from $2.99 / 1,000 experiences

Go to Apify Store
Airbnb Experiences Scraper

Airbnb Experiences Scraper

Scrape public Airbnb Experiences with pricing, ratings, duration, category, identifiers, badges, image metadata, and fail-closed access diagnostics.

Pricing

from $2.99 / 1,000 experiences

Rating

0.0

(0)

Developer

w3crawler

w3crawler

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

3 days ago

Last modified

Categories

Share

What does Airbnb Experiences Scraper do?

Airbnb Experiences Scraper collects rich, public activity listings from Airbnb Experiences. It is an Airbnb Experiences API alternative for search-result harvesting, pagination, filtering, sorting, and optional detail-page enrichment.

The Actor reads Airbnb's server-rendered data first, uses stable DOM selectors as a fallback, and can enrich selected records from public experience pages. It does not log in, solve CAPTCHAs, cross paywalls, or collect private profile data.

Why use Airbnb Experiences Scraper?

Use the Actor to build experience catalogs, destination research datasets, travel recommendation systems, price and rating comparisons, tourism reports, or monitoring workflows.

Main capabilities:

  • Rich search records with title, description, location, category, price breakdowns, currency, rating, review count, duration, badges, image IDs, image URLs, and page metadata.
  • Public detail enrichment with host information, meeting point, structured location, gallery media metadata, highlights, agenda, guest requirements, policies, accessibility, ticketing, related activities, reviews, and availability.
  • Multiple Airbnb search URLs in one run, global maxItems enforcement, and optional deduplication across pages and locations.
  • Cursor-aware pagination with a safe offset fallback. Custom URL query parameters are preserved when the next page is requested.
  • Keyword, price, rating, review-count, duration, and ticketed-only filters.
  • Stable sorting by price, rating, reviews, or duration. Non-recommended sorting is performed across the complete fetched page set before the top records are selected.
  • Fail-closed diagnostics when a public page is blocked or unavailable, including a run summary and optional debug HTML/screenshot artifacts.
  • Apify scheduling, API access, integrations, run history, monitoring, and optional Apify proxy routing for browser requests. Proxy routing does not bypass access controls; the HTTP fallback remains direct.

What data can Airbnb Experiences Scraper extract?

The most useful fields are shown below. Fields are omitted when Airbnb does not expose a value, and nullable fields are supported in the dataset schema.

FieldTypeDescription
experienceIdstringAirbnb experience identifier.
urlstringPublic experience detail URL.
titlestringPublic experience title.
descriptionstringSearch-card byline or description.
locationstringActivity location shown in search results.
pricenumberParsed per-guest price.
priceFormattedstringVisible formatted price label.
currencystringRequested or parsed currency code.
ratingnumberAverage public rating.
reviewCountintegerPublic review count.
durationMinutesintegerParsed experience duration.
categorystringPublic primary theme or category.
thumbnailUrlstringPrimary image URL.
imageUrlsarraySearch-card image URLs.
detailMediaarrayDetail gallery records with URLs, dimensions, tags, and aspect ratios.
hostNamestringPublic host or activity-provider name.
locationDetailsobjectStructured public country, region, locality, and address data.
highlights / agendaarraysPublic highlights and activity steps.
reviewsarrayBounded public review sample.
availabilityarrayCurrently exposed public time slots and capacity.
recordId / recordTypestring / stringStable row identity and experience or diagnostic record kind.
searchUrl / searchPagestring / integerSource search page and one-based page number.

How to scrape Airbnb Experiences

  1. Open the Actor's Input tab.
  2. Enter a location, or provide one or more Airbnb Experiences search URLs in startUrls.
  3. Select the currency, locale, date range, filters, sort order, page limit, and item limit.
  4. Decide whether to enrich detail pages and whether to include public reviews and availability.
  5. Start the Actor and open the Dataset tab when the run completes.
  6. Download the results or use the Actor's API tab to integrate the dataset into an application, workflow, or scheduled job.

How much will it cost to scrape Airbnb Experiences?

The Actor is compute-based. A small search-only run normally uses less compute than a multi-page run with detail enrichment, reviews, and availability. The main cost controls are maxItems, maxPages, includeDetails, maxDetailItems, maxReviews, maxConcurrency, and requestTimeoutSecs.

Filters are applied while pages are fetched. With a non-recommended sort, the Actor may fetch every allowed page before selecting the best maxItems records, so a larger maxPages can increase both coverage and compute usage. Current run cost and platform pricing are shown in the Apify Console for your account.

Input

See the Input tab for the complete validated configuration. All fields are optional; the default generated search is London, in USD, with up to 50 records and detail enrichment enabled for up to 20 records.

Search configuration and input sources

FieldTypeDefaultDescription
locationstringLondonCity, region, or country used to build the search URL when startUrls is empty.
categoryenum""Optional category: art, cooking, entertainment, fitness, history, nature, social, sports, or tours. An empty value searches all categories.
currencyenumUSDPrice currency: USD, EUR, GBP, CAD, AUD, INR, JPY, or SGD.
localestringenAirbnb locale such as en or fr-FR. Valid format is xx or xx-YY.
startDateYYYY-MM-DD stringnot setOptional experience start date.
endDateYYYY-MM-DD stringnot setOptional experience end date. Must be on or after startDate.
startUrlsarray of objectsnot setCustom Airbnb Experiences search URLs. Each entry must be { "url": "https://..." }. These URLs take precedence over generated location, category, and date parameters, while result filters still apply.

startUrls supports multiple locations in one run. Duplicate URLs are removed before crawling, and the URL path is used to derive the source search location for each record.

Result filters

FieldTypeDefaultDescription
keywordstring""Case-insensitive match against title, description, location, and category. Maximum 200 characters.
minPricenumbernot setKeep records at or above this per-guest price. Range: 0–100000.
maxPricenumbernot setKeep records at or below this per-guest price. Range: 0–100000; 0 means no upper bound.
minRatingnumbernot setMinimum public rating from 0 to 5. Records without a rating do not pass when this filter is set.
minReviewCountintegernot setMinimum public review count. Range: 0–10000000.
minDurationMinutesintegernot setMinimum duration in minutes. Range: 0–10080.
maxDurationMinutesintegernot setMaximum duration in minutes. Range: 0–10080; 0 means no upper bound.
ticketedOnlybooleanfalseKeep only records Airbnb marks as ticketed.

Sorting

sortBy valueMeaning
recommendedPreserve Airbnb/source order and stop when the global item limit is reached.
price_ascLowest parsed price first.
price_descHighest parsed price first.
rating_descHighest rating first.
reviews_descHighest review count first.
duration_ascShortest duration first.
duration_descLongest duration first.

Missing numeric values sort after records with values. Ties retain source order.

Pagination and result limits

FieldTypeDefaultDescription
maxItemsinteger50Maximum records emitted across all start URLs. Range: 1–1000.
maxPagesinteger0Maximum pages per start URL. Range: 0–100; 0 continues until maxItems or Airbnb has no next page, with a hard 100-page safety cap.
deduplicatebooleantrueRemove repeated experienceId values across pages and start URLs.

The Actor follows Airbnb's exposed next-page cursor when possible and otherwise advances the items_offset safely. It preserves existing query parameters such as currency, locale, dates, and custom filters. Page-level filtering does not stop pagination just because a page has few matches; the next page is requested while the configured limits and source pagination allow it.

Detail enrichment

FieldTypeDefaultDescription
includeDetailsbooleantrueOpen public detail pages and merge structured detail data into selected records.
maxDetailItemsinteger20Maximum records to enrich. Range: 0–100; 0 disables detail requests.
includeReviewsbooleantrueInclude public review objects on enriched records when exposed.
maxReviewsinteger5Maximum review entries per enriched record. Range: 1–20.
includeAvailabilitybooleantrueInclude currently exposed public time slots and capacity metadata when available.
includeDiagnosticsbooleantrueEmit explicit diagnostic rows for blocked, empty, or unavailable public pages. Set to false to keep diagnostics out of the dataset; OUTPUT_SUMMARY still records counts.

Detail extraction uses public activity payloads first, then JSON-LD/DOM fallback data. If a detail request fails, the original search record is still emitted with detailEnriched: false and bounded detail error fields.

Developer options

These controls are grouped under Developer Options in the input schema.

FieldTypeDefaultValid rangeDescription
requestDelayMsinteger20000–15000Delay before each browser/HTTP request. Use a respectful production value.
maxConcurrencyinteger21–5Maximum Playwright pages processed in parallel. Higher values use more memory and may increase blocking risk.
maxRequestRetriesinteger30–10Maximum retries for failed browser requests.
requestTimeoutSecsinteger12030–300Per-page browser and fallback HTTP timeout.
requestHandlerTimeoutSecsinteger30060–900Maximum time for one crawler handler, including extraction and queued detail work. Must be at least requestTimeoutSecs.
proxyConfigurationobjectnot setβ€”Apify proxy configuration for browser requests. The fallback HTTP transport remains direct when browser startup fails.

Input examples

This uses the generated London search, one page, and one enriched detail record. It is a good smoke-test input.

{
"location": "London",
"currency": "GBP",
"maxItems": 5,
"maxPages": 1,
"includeDetails": true,
"maxDetailItems": 1,
"includeReviews": true,
"maxReviews": 3,
"includeAvailability": true,
"requestDelayMs": 2000,
"maxConcurrency": 1,
"maxRequestRetries": 2,
"requestTimeoutSecs": 90
}

2. Filtered food experiences with global rating sort

Non-recommended sorting considers all matched records from the fetched pages before selecting the top three.

{
"location": "London",
"keyword": "food",
"minPrice": 20,
"maxPrice": 150,
"minRating": 4,
"minReviewCount": 5,
"minDurationMinutes": 30,
"maxDurationMinutes": 240,
"sortBy": "rating_desc",
"maxItems": 3,
"maxPages": 2,
"includeDetails": false
}

3. Multiple cities from custom search URLs

Each startUrls item is an object with a required url property. The global maxItems limit and deduplication apply across both locations.

{
"startUrls": [
{ "url": "https://www.airbnb.com/s/London/experiences?currency=USD&locale=en" },
{ "url": "https://www.airbnb.com/s/Paris/experiences?currency=EUR&locale=fr-FR" }
],
"maxItems": 25,
"maxPages": 2,
"deduplicate": true,
"includeDetails": true,
"maxDetailItems": 5
}

4. Ticketed attractions in a date range

{
"location": "London",
"category": "tours",
"currency": "USD",
"locale": "en",
"startDate": "2026-10-01",
"endDate": "2026-10-07",
"ticketedOnly": true,
"minRating": 4.5,
"sortBy": "price_asc",
"maxItems": 10,
"maxPages": 3,
"includeDetails": true,
"maxDetailItems": 3,
"includeReviews": false,
"includeAvailability": true
}

5. Developer-controlled search-only run

Use this shape for a low-concurrency run when you only need search-card data.

{
"location": "New York",
"maxItems": 20,
"maxPages": 1,
"includeDetails": false,
"requestDelayMs": 3000,
"maxConcurrency": 1,
"maxRequestRetries": 1,
"requestTimeoutSecs": 60,
"requestHandlerTimeoutSecs": 120,
"includeDiagnostics": false
}

For browser routing on the Apify platform, add a standard proxy configuration such as { "proxyConfiguration": { "useApifyProxy": true } }. The configuration is applied to browser requests; the bounded direct HTTP fallback is used only when browser startup or access fails.

Output

You can download the dataset in various formats such as JSON, HTML, CSV, or Excel. The default dataset contains one record per extracted experience, or an explicit diagnostic record when Airbnb does not provide usable public data.

Search and run-trace fields

The current implementation can emit these normalized top-level fields:

GroupFields
IdentityexperienceId, listingId, pictureId, url, recordId, recordType
Request tracerequestedUrl, finalUrl, status, ok, dataAvailable, accessStatus, sourceDomain, locale, searchLocation, searchUrl, searchPage, pageNum, source, scrapedAt
Search contenttitle, description, location, category, durationMinutes, durationText, rating, reviewCount
Search pricingprice, priceOriginal, priceMin, priceMax, priceFormatted, currency, priceQualifier, priceLeadingText, isFromPrice, priceDetails, priceDiscountText
Search mediathumbnailUrl, thumbnailAspectRatio, imageUrls, imageIds, imageCount, imageAspectRatios, badges, badgeTypes
Search statusisTicketed, timeLeftToBook, pageType, found, targetKind, runStatus, error, errorCode, extractionMethod, fallbackMode

thumbnailUrl, imageUrls, and detailImageUrls are selected from the experience/listing media payload or semantic gallery elements. Airbnb platform icons, search-bar assets, badges, logos, and avatars are excluded from listing media. Reviewer profile pictures, when public, remain available only as the explicit reviews[].reviewerProfilePictureUrl field.

Detail fields

When includeDetails is enabled and a detail page is available, the record may also include:

GroupFields
Detail statusdetailEnriched, detailExtractionMethod, detailError, detailErrorCode, detailScrapedAt
Detail contentdetailTitle, detailDescription, detailIntro, detailActivityId, detailCategory, detailPriceFormatted, detailRating, detailReviewCount
Host and locationhostName, hostUrl, hostDescription, hostOtherReviewCount, meetingPoint, locationDetails
MediadetailImageUrls, detailImageCount, detailImageAspectRatios, detailMedia
Itinerary and requirementshighlights, agenda, thingsToKnow, guestRequirements, meetingTypes, policies, accessibilityFeatures
Product and linksproductType, isTicketed, supportsLimitedInventory, isUpgraded, ticketing, shareUrl, publishedOfferingId, helpCenterUrls
Related and social proofsuggestedActivities, reviews, availability

Nested output structures

The normalized nested objects commonly contain the following keys. Airbnb may add source-specific keys over time.

FieldCommon nested keys
priceDetails[]label, price, priceFormatted
detailMedia[]id, uri, altText, caption, tags, originalWidth, originalHeight, aspectRatio, orientation
locationDetailscountry, region, locality, displayLabel, formattedAddress
guestRequirementsminAge, childrenAllowed, infantsAllowed; each may contain isEnabled, minAge, and maxAge
highlights[]type, name, description, imageUrl
agenda[]id, title, description, imageUrl
thingsToKnow[]type, title, description, icon
accessibilityFeatures[]type, name, description, isEnabled, icon
policiesguestRequirements, activityLevel, whatIsIncluded, whatYouNeed, accessibility, cancellationPolicy, termsOfService, ticketDisclaimer
ticketingisFlexibleEntry, guestNameCollectionRequired, isTicketed
helpCenterUrlsaccessibility, preScreening, ticketDisclaimer
suggestedActivities[]experienceId, title, location, priceFormatted, rating, reviewCount, thumbnailUrl, category
reviews[]reviewId, rating, comment, highlightedComment, date, reviewerName, reviewerId, reviewerLocation, reviewerProfilePictureUrl, paidPromotionDisclaimer
availability[]id, bookingStartTime, instanceDay, instanceStartTime, instanceStartTimeWithOffset, instanceStartTimeUtc, instanceDuration, availabilityDescription, isAvailable, lowRemainingAvailability, remainingCapacity, maximumCapacity

Representative rich dataset item

The following is a valid, shortened example of the shape returned after detail enrichment. Array lengths vary by listing and by the input limits.

{
"position": 1,
"pageNum": 1,
"searchLocation": "London",
"searchUrl": "https://www.airbnb.com/s/London/experiences?currency=USD&locale=en",
"source": "Airbnb Experiences",
"url": "https://www.airbnb.com/experiences/1234567",
"experienceId": "1234567",
"listingId": "RXhwbG9yZUFjdGl2aXR5TGlzdGluZzoxMjM0NTY3",
"pictureId": "UGljdHVyZToyNTEzOTU1MjY3",
"title": "Example Historic Walking Tour",
"description": "Explore a historic district with a local guide.",
"location": "Example City",
"price": 45,
"priceOriginal": 50,
"priceMin": 45,
"priceMax": 50,
"priceFormatted": "From $45 USD per guest",
"currency": "USD",
"priceQualifier": "/ guest",
"priceLeadingText": "From",
"isFromPrice": true,
"priceDetails": [
{ "label": "Adults", "price": 45, "priceFormatted": "$45 USD per guest" }
],
"rating": 4.9,
"reviewCount": 128,
"durationMinutes": 150,
"durationText": "2.5 hours",
"category": "Cultural tours",
"thumbnailUrl": "https://a0.muscache.com/im/pictures/example-cover.jpg",
"thumbnailAspectRatio": 1.5,
"imageUrls": ["https://a0.muscache.com/im/pictures/example-cover.jpg"],
"imageIds": ["UGljdHVyZTpleGFtcGxl"],
"imageCount": 1,
"imageAspectRatios": [1.5],
"badges": ["Popular"],
"badgeTypes": ["BEST_SELLER"],
"isTicketed": false,
"detailEnriched": true,
"detailExtractionMethod": "browser_activity_listing",
"detailScrapedAt": "2026-09-05T12:00:00.000Z",
"detailTitle": "Example Historic Walking Tour",
"detailDescription": "A guided tour through an example historic district.",
"detailIntro": "Meet a local guide and discover the city's history.",
"detailActivityId": "QWN0aXZpdHlMaXN0aW5nOjEyMzQ1Njc=",
"detailPriceFormatted": "From $45 USD per guest",
"detailCategory": "History",
"hostName": "Example Host",
"hostUrl": "https://www.airbnb.com/users/show/12345",
"hostDescription": "A local guide with several years of experience.",
"hostOtherReviewCount": 850,
"meetingPoint": "Meet near Example Square.",
"locationDetails": {
"country": "Example Country",
"region": "Example Region",
"locality": "Example City",
"displayLabel": "Example City, Example Region",
"formattedAddress": "Example Square, Example City"
},
"detailImageUrls": ["https://a0.muscache.com/im/pictures/example-detail.jpg"],
"detailImageCount": 1,
"detailImageAspectRatios": [1.3333],
"detailMedia": [
{
"id": "SW1hZ2VFbnRpdHk6ZXhhbXBsZQ==",
"uri": "https://a0.muscache.com/im/pictures/example-detail.jpg",
"altText": "View from the tour",
"caption": "Historic district",
"tags": [{ "name": "cover" }],
"originalWidth": 1200,
"originalHeight": 900,
"aspectRatio": 1.3333,
"orientation": "LANDSCAPE"
}
],
"highlights": [
{ "type": "LOCATION", "name": "Example Square", "description": "Meet in the historic center." }
],
"agenda": [
{ "title": "Welcome", "description": "Meet the host and start the walk." }
],
"thingsToKnow": [
{ "type": "GUEST_REQUIREMENTS", "title": "Guest requirements", "description": "Guests aged 12 and over can attend." }
],
"guestRequirements": {
"minAge": { "isEnabled": true, "minAge": 12 },
"childrenAllowed": { "isEnabled": true, "minAge": 12, "maxAge": 17 }
},
"meetingTypes": ["IN_PERSON"],
"policies": {
"whatIsIncluded": "Local guide",
"cancellationPolicy": "Cancel according to the public listing policy."
},
"accessibilityFeatures": [
{ "type": "WHEELCHAIR_ACCESSIBLE", "name": "Wheelchair accessible", "isEnabled": true }
],
"productType": "EXPERIENCE",
"supportsLimitedInventory": true,
"isUpgraded": true,
"ticketing": { "isFlexibleEntry": false, "guestNameCollectionRequired": false, "isTicketed": false },
"shareUrl": "https://www.airbnb.com/experiences/1234567",
"publishedOfferingId": "QWN0aXZpdHlPZmZlcmluZzo2MjE0MTUz",
"helpCenterUrls": { "accessibility": "https://www.airbnb.com/help/article/2166" },
"suggestedActivities": [
{ "experienceId": "7654321", "title": "Related public experience", "location": "Example City", "rating": 4.8 }
],
"reviews": [
{
"reviewId": "review-123",
"rating": 5,
"comment": "An excellent experience.",
"date": "July 2026",
"reviewerName": "Example Guest",
"reviewerLocation": "Example City"
}
],
"availability": [
{
"id": "slot-123",
"instanceDay": "2026-10-01",
"instanceStartTime": "10:00 am",
"instanceStartTimeUtc": "2026-10-01T09:00:00Z",
"instanceDuration": 150,
"availabilityDescription": "4 spots available",
"isAvailable": true,
"remainingCapacity": 4,
"maximumCapacity": 8
}
],
"scrapedAt": "2026-09-05T12:00:00.000Z"
}

Detail fallback record

If a detail page cannot be enriched, the base search result remains available:

{
"experienceId": "1234567",
"title": "Example Historic Walking Tour",
"url": "https://www.airbnb.com/experiences/1234567",
"detailEnriched": false,
"detailExtractionMethod": "browser_detail",
"detailError": "Detail response unavailable",
"detailErrorCode": "DETAIL_EXTRACTION_FAILED",
"detailScrapedAt": "2026-09-05T12:00:00.000Z"
}

Run summary and diagnostics

At the end of every run, the Actor writes OUTPUT_SUMMARY to the default key-value store:

{
"status": "SUCCEEDED",
"itemCount": 25,
"successfulCount": 25,
"diagnosticCount": 0,
"blockedCount": 0,
"scheduledCount": 25,
"detailRequested": 3,
"startUrlCount": 1,
"searchPagesProcessed": 2,
"filteredOutCount": 0,
"dataAvailable": true,
"fallbackUsed": false,
"source": "airbnb_experiences_public_pages",
"completedAt": "2026-09-05T12:00:00.000Z"
}

The summary fields are status, itemCount, successfulCount, diagnosticCount, blockedCount, scheduledCount, detailRequested, detailEnriched, detailFailed, failedRequestCount, startUrlCount, searchPagesProcessed, filteredOutCount, paginationStoppedReason, dataAvailable, fallbackUsed, source, and completedAt.

When a public search page is blocked or returns no usable records, the Actor stops that access path fail-closed and can emit a diagnostic record such as:

{
"pageType": "run_diagnostic",
"recordId": "airbnb_experience_diagnostic_aHR0cHM6Ly93d3cuYWlyYm5iLmNvbQ",
"recordType": "diagnostic",
"requestedUrl": "https://www.airbnb.com/s/London/experiences",
"finalUrl": "https://www.airbnb.com/s/London/experiences",
"status": "error",
"ok": false,
"dataAvailable": false,
"accessStatus": "blocked",
"targetKind": "search",
"sourceDomain": "airbnb.com",
"runStatus": "BLOCKED_FAIL_CLOSED",
"error": "HTTP 403",
"errorCode": "HTTP_403",
"fallbackMode": "http",
"source": "Airbnb Experiences",
"scrapedAt": "2026-09-05T12:00:00.000Z"
}

The key-value store may also contain debug_html and debug_screenshot for a blocked or empty browser page. These artifacts help explain why a run produced diagnostics instead of experience rows.

Tips and advanced options

  • Start with maxItems: 5, maxPages: 1, includeDetails: false, and maxConcurrency: 1 while testing a new URL.
  • Increase maxPages when filters are selective. A page with zero matches does not necessarily mean the source has no later matches.
  • Use sortBy: "recommended" for the fastest path. Price, rating, review, and duration sorts may fetch all allowed pages before choosing the final records.
  • Keep requestDelayMs and maxConcurrency conservative for production runs.
  • Set maxDetailItems lower than maxItems when you need a broad search dataset but only a sample of rich detail pages.
  • Set includeReviews or includeAvailability to false when those nested arrays are not needed.
  • If a custom URL already contains Airbnb search parameters, use startUrls; pagination will preserve those parameters while changing only the page offset.

FAQ, support, and responsible use

Why did I receive fewer records than maxItems?

The source may have fewer public results, filters may exclude records, pagination may be limited by maxPages, or Airbnb may have blocked the request. Check OUTPUT_SUMMARY, especially filteredOutCount, searchPagesProcessed, dataAvailable, fallbackUsed, and the diagnostic fields.

Why are detail fields missing?

Detail enrichment is bounded by maxDetailItems and only runs when includeDetails is true. Airbnb may also omit a field, expose it only for some products, or temporarily block the detail request. A failed enrichment keeps the base search record and adds detailError fields.

Can I use a proxy with this Actor?

Yes. Supply a standard Apify proxyConfiguration object to route browser requests through the configured Apify proxy. If the browser cannot launch and the bounded HTTP fallback is used, those direct requests do not inherit browser proxy routing. Proxying does not solve CAPTCHAs or bypass access controls.

Where can I report a problem?

Use the Actor's Issues tab for bug reports and feature requests. Include the input JSON, run ID, OUTPUT_SUMMARY, and the relevant error code when possible. For programmatic use, use the Actor's API tab and the dataset download links in the run details.

Disclaimer

This Actor is not affiliated with Airbnb. Use it only for lawful, ethical purposes and respect Airbnb's terms, robots rules, rate limits, and applicable privacy laws.

Our Actors are ethical and do not extract private user data such as email addresses, gender, or private location. They only extract information that is publicly available on the requested pages. Results can still contain personal data that a public host or reviewer chose to display. Personal data is protected by the GDPR in the European Union and by other regulations around the world. Do not scrape personal data unless you have a legitimate reason to do so; consult qualified legal counsel if you are unsure.