Airbnb Experiences Scraper avatar

Airbnb Experiences Scraper

Pricing

Pay per event

Go to Apify Store
Airbnb Experiences Scraper

Airbnb Experiences Scraper

Extract public Airbnb Experiences by destination or URL, including titles, descriptions, ratings, review counts, images, locations, and scheduled start dates. Export to JSON, CSV, Excel, or API with no Airbnb login required.

Pricing

Pay per event

Rating

0.0

(0)

Developer

Stas Persiianenko

Stas Persiianenko

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

2 days ago

Last modified

Categories

Share

Collect public Airbnb Experiences catalogs and detail records by destination or URL. Export experience IDs, titles, descriptions, ratings, review counts, images, locations, and public scheduled start dates to JSON, CSV, Excel, XML, or RSS. No Airbnb login or private API key is required.

Use a destination such as Los Angeles, CA, paste an Airbnb Experiences URL, choose a result limit, and start the Actor. The HTTP-first extractor reads server-rendered cards and Product/Event structured data without running a costly browser by default.

What does Airbnb Experiences Scraper do?

Airbnb Experiences Scraper turns public destination catalogs and experience pages into reusable structured data. It supports two practical workflows:

  • 🔎 Discover experience inventory for one or more travel destinations.
  • 🔗 Extract a known experience directly from its /experiences/{id} URL.
  • ⭐ Track ratings and review-count changes over scheduled runs.
  • 🗺️ Capture public place and address fields exposed on detail pages.
  • 📅 Save the next public scheduled start date when Airbnb includes Event JSON-LD.
  • 🖼️ Collect source image URLs for catalog analysis.

Version 1 only returns fields independently observed in public server-rendered HTML. It does not promise price, availability, host profiles, or review text. This conservative contract helps prevent misleading empty columns when Airbnb changes what it exposes publicly.

Who is it for?

Tour and activity operators

  • Compare destination catalogs with nearby or competing experiences.
  • Refresh ratings, review counts, descriptions, and imagery on a schedule.
  • Discover new activity concepts entering a market.

Online travel agencies and inventory teams

  • Build destination-level activity indexes for internal research.
  • Normalize public experience records before human supplier review.
  • Feed new URLs into catalog-monitoring pipelines.

Travel market analysts

  • Compare activity density between cities.
  • Study rating and review-count distributions.
  • Track how public descriptions and scheduled dates change over time.

Developers and data teams

  • Replace manual browsing with a repeatable API call.
  • Export data into a warehouse, spreadsheet, or dashboard.
  • Trigger downstream workflows with webhooks after each run.

Why use this Airbnb Experiences extractor?

  • No Airbnb account required for the documented public-data scope.
  • HTTP-first extraction avoids browser startup and keeps runs lightweight.
  • 🎯 Two input routes support discovery and direct entity lookup.
  • 🧹 Global deduplication prevents duplicate experience IDs across inputs.
  • 🛡️ Fail-closed URL validation rejects Airbnb stays and unrelated routes.
  • 🔁 Bounded retries handle temporary delivery failures without endless loops.
  • 📦 Ready exports include JSON, CSV, Excel, XML, and RSS.
  • Apify schedules make recurring catalog refreshes simple.
  • 🔌 API and integrations connect results to existing tools.
  • 💳 Pay per event means charges follow emitted experience records.

What Airbnb Experiences data can you extract?

CategoryFieldDescription
IdentityexperienceIdStable numeric ID parsed from the Airbnb URL
IdentitytitlePublic experience name
ContentdescriptionCard summary or detail-page description
ReputationratingNumeric average rating when exposed
ReputationreviewCountPublic aggregate rating count
MediaimagesDeduplicated public image URL array
PlacelocationNamePublic Event place label
PlacecityAddress locality
PlaceregionAddress region or state
PlacecountryAddress country
SchedulestartDatesPublic Event start dates found during the run
LinksexperienceUrlCanonical Airbnb experience URL
LinksdiscoveryUrlDestination page where the record was found
LineagesourceTypedestination or direct
LineagescrapedAtISO timestamp for the extraction

Optional fields are omitted when Airbnb does not expose them. The Actor does not replace missing values with invented defaults.

How much does it cost to scrape Airbnb Experiences?

This Actor uses pay-per-event pricing. There is a small run-start charge and one charge for each unique experience saved. All Apify platform usage is included in the displayed event price.

EventFreeStarter / BronzeScale / SilverBusiness / Gold
Run started$0.005$0.005$0.005$0.005
One experience$0.00051385$0.00044682$0.00034852$0.00026809

Higher enterprise tiers receive additional volume discounts. Prices were derived from a representative 10-record cloud run and verified against the live Actor configuration.

Example estimates at current prices

WorkflowRecordsApproximate Free-tier charge
One direct experience lookup1$0.00551
Small destination sample10$0.01014
Multi-destination catalog100$0.05639

The final run can return fewer records than the limit when the public source contains fewer unique experiences.

How to scrape Airbnb Experiences

  1. Open Airbnb Experiences Scraper.
  2. Enter one or more destination names under Destination searches.
  3. Optionally add destination or direct experience URLs.
  4. Set Maximum experiences to a small number for the first run.
  5. Leave Fetch experience details enabled when you need locations and scheduled dates.
  6. Click Start.
  7. Preview records in the Dataset tab.
  8. Export the dataset or connect it to your application.

Quick destination input

{
"searchQueries": ["Los Angeles, CA"],
"maxItems": 10,
"enrichDetails": true
}

Direct experience input

{
"startUrls": [
{ "url": "https://www.airbnb.com/experiences/6101449" }
],
"maxItems": 1,
"enrichDetails": true
}

Multi-destination monitoring input

{
"searchQueries": ["Los Angeles, CA", "New York, NY", "Paris, France"],
"maxItems": 100,
"enrichDetails": true
}

Input parameters

ParameterTypeDefaultDescription
searchQueriesstring arraynoneCity and region names converted to public Airbnb destination routes
startUrlsrequest listnoneDestination, /s/.../experiences, or direct experience URLs
maxItemsinteger10Global unique experience limit from 1 to 1,000
enrichDetailsbooleantrueFetch Product/Event JSON-LD from detail pages
proxyConfigurationobjectdirect connectionOptional Apify Proxy or custom proxies

Provide at least one destination query or URL. When both are present, the Actor processes them in order and deduplicates by experience ID. Only public HTTPS Airbnb Experiences routes are accepted.

Output example

{
"experienceId": "6101449",
"title": "Pickle tasting adventure with the Pickleman",
"description": "Meet the Pickleman at his pickle tasting bar in the Original Farmers Market.",
"rating": 5,
"reviewCount": 71,
"images": [
"https://a0.muscache.com/im/pictures/Mt/MtTemplate-6101449/original/example.jpeg"
],
"locationName": "Los Angeles, CA",
"city": "Los Angeles",
"region": "CA",
"country": "United States",
"startDates": ["2026-07-16T18:30:00.000Z"],
"experienceUrl": "https://www.airbnb.com/experiences/6101449",
"sourceType": "direct",
"scrapedAt": "2026-07-16T05:02:53.719Z"
}

Destination rows also include discoveryUrl. Dates represent only public Event structured data observed during that run, not a complete availability calendar.

Tips for reliable results

  • Start with 5–10 records to validate your destination and output shape.
  • Keep detail enrichment on when location and schedule fields matter.
  • Turn detail enrichment off for a fast catalog-title and image sample.
  • Use explicit Airbnb destination URLs when a destination name is ambiguous.
  • Schedule runs at a respectful cadence instead of repeatedly scraping the same page.
  • Configure a proxy only if direct delivery is rate-limited or geography-dependent.
  • Compare records by experienceId, not title, because titles can change.
  • Treat startDates as a point-in-time public signal rather than guaranteed availability.

Monitor Airbnb Experiences on a schedule

Apify schedules can rerun the same destination input hourly, daily, weekly, or with a custom cron expression. A typical monitoring workflow is:

  1. Run the Actor daily with stable destination queries.
  2. Export records to a named warehouse table or spreadsheet.
  3. Upsert by experienceId.
  4. Compare rating, reviewCount, description, and startDates with the previous snapshot.
  5. Notify an analyst only when a meaningful field changes.

Keep historical snapshots outside the default dataset if longitudinal analysis is required.

Integrations for travel-data workflows

Airbnb Experiences → Google Sheets

Append destination inventory for operator research and manually annotate competitors.

Airbnb Experiences → Slack or Discord

Send an alert when a scheduled run discovers an unseen experience ID or rating change.

Airbnb Experiences → Make or Zapier

Trigger enrichment, classification, translation, or CRM review after a dataset item is created.

Airbnb Experiences → Webhook

Receive a run-finished event and load the dataset into a warehouse or internal travel catalog.

Airbnb Experiences → Google Drive or S3

Archive dated CSV or JSON exports for market history and auditability.

API usage

You can run automation-lab/airbnb-experiences-scraper from any HTTP client. Replace APIFY_TOKEN with a token from your Apify account.

Node.js

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: process.env.APIFY_TOKEN });
const run = await client.actor('automation-lab/airbnb-experiences-scraper').call({
searchQueries: ['Los Angeles, CA'],
maxItems: 10,
enrichDetails: true,
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items);

Python

import os
from apify_client import ApifyClient
client = ApifyClient(os.environ['APIFY_TOKEN'])
run = client.actor('automation-lab/airbnb-experiences-scraper').call(run_input={
'searchQueries': ['Los Angeles, CA'],
'maxItems': 10,
'enrichDetails': True,
})
items = client.dataset(run['defaultDatasetId']).list_items().items
print(items)

cURL

curl -X POST \
"https://api.apify.com/v2/acts/automation-lab~airbnb-experiences-scraper/runs?token=$APIFY_TOKEN" \
-H "Content-Type: application/json" \
-d '{"searchQueries":["Los Angeles, CA"],"maxItems":10,"enrichDetails":true}'

Use with AI agents via MCP

Use the hosted Apify MCP server to call this Actor from compatible AI assistants.

Claude Code

claude mcp add --transport http apify \
"https://mcp.apify.com?tools=automation-lab/airbnb-experiences-scraper"

Claude Desktop, Cursor, or VS Code

{
"mcpServers": {
"apify": {
"url": "https://mcp.apify.com?tools=automation-lab/airbnb-experiences-scraper"
}
}
}

Your client uses OAuth to connect to your Apify account. Try these example prompts:

  • “Use automation-lab/airbnb-experiences-scraper to collect 20 Los Angeles experiences with detail fields.”
  • “Extract this Airbnb Experience URL and summarize its location, rating, and next public start date.”
  • “Compare public Airbnb Experience catalogs in New York and Paris by rating and review count.”

Data quality and limitations

Airbnb controls the source markup and can change it without notice. The Actor uses public SSR HTML and Product/Event JSON-LD, plus bounded retries for transient variants.

  • Destination pages may expose different catalog sizes or layouts by location.
  • Some cards omit ratings, review counts, descriptions, or images.
  • Some detail pages omit Event location or start-date data.
  • startDates is not a complete booking calendar.
  • Prices, live availability, hosts, and review text are outside the v1 contract.
  • Destination results reflect what Airbnb publicly serves at run time.
  • A configured proxy can produce geography-specific output.

A run fails non-zero when none of its inputs yields a valid experience record.

Legality

Scraping public web data is generally permitted in many jurisdictions, but rules depend on the data, location, purpose, and contract. Use this Actor only for lawful purposes and only collect information you are authorized to process. Respect Airbnb terms, intellectual-property rights, reasonable request rates, privacy laws, and deletion obligations. Do not use public records for harassment, discrimination, spam, or attempts to identify private individuals. When personal data appears, establish a lawful basis and follow applicable GDPR, CCPA, and local requirements. This guidance is informational and is not legal advice.

Troubleshooting

Why did my destination return no experiences?

Try the exact public Airbnb destination page in startUrls. Destination names can be ambiguous, and Airbnb may not publish an experience catalog for every place. Inspect the run log for a route-specific warning.

Why are location or scheduled dates missing?

Confirm enrichDetails is true. Airbnb does not expose Event JSON-LD on every detail page, so optional fields are omitted when unavailable.

Why was my URL rejected?

Only HTTPS Airbnb destination pages, /s/.../experiences pages, and direct /experiences/{id} URLs are supported. Airbnb stays, profiles, and unrelated routes intentionally fail closed.

What should I do after a temporary block?

Wait before retrying, reduce request frequency, and configure Apify Proxy if direct delivery remains unavailable in your geography.

FAQ

How fast is the Airbnb Experiences scraper?

Catalog-only runs usually require one HTTP request per destination. Detail-enriched runs add one bounded request per selected experience, so duration grows with maxItems.

How much does one run cost?

The price is a $0.005 start event plus the tier-specific per-experience event, starting at $0.00051385 per record on the Free tier. The Actor never charges for more experience events than it emits.

Does Airbnb provide an official public Experiences API?

The Actor does not depend on a private or authenticated Airbnb API. It structures public page data for users who need repeatable exports and automation.

Does this Actor scrape Airbnb stays?

No. Use Airbnb Scraper for stay listings. This Actor focuses only on Airbnb Experiences.

Can I scrape reviews, hosts, prices, or availability?

Not in version 1. Those fields are intentionally excluded until a stable public source is independently verified.

Can duplicate experiences appear?

No duplicate IDs are emitted within a run. Inputs are deduplicated globally by experienceId.

Responsible operation

Keep initial limits low, avoid unnecessary repeated requests, and schedule only at the freshness interval your workflow needs. The Actor uses a direct HTTP connection unless proxy settings are supplied. Every saved row includes source links and a scrape timestamp to support verification and lineage. If the source returns no valid experience records after bounded retries, the Actor fails rather than reporting a misleading successful empty run.