Skip to content

About

Airbnb scraper in Python: listings, nightly and total prices, ratings and availability to CSV, price tracker.

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Latest commit

 

History

1 Commit

Folders and files

Repository files navigation

Airbnb scraper in Python: listings, prices and availability

This repository calls a paid Apify Actor built by Flatrow Data Studio (the author). Links to apify.com carry the author's affiliate code: the author may earn a commission if you sign up to Apify through them, at no extra cost to you.

A small Airbnb scraper in Python. scrape.py searches Airbnb for one or more places and dates and saves one row per listing to CSV: nightly and total price, strike-through price, rating, review count, property and room type, bedrooms, coordinates and link. monitor_prices.py turns the same search into an Airbnb price tracker that returns only the price drops, price rises and new listings since its previous run.

Both scripts run the Airbnb Listings Scraper & Price Tracker on Apify through the official apify-client package: the Actor reads the public search pages in Apify's cloud and returns clean rows, so there is no browser, HTML parsing or proxy to maintain on your side. No login, no cookies, and no personal data: nothing about hosts or guests is collected.

Use cases

  • Price your own listing: what comparable listings ask for the dates you still have open.
  • Short-term rental market research: prices, ratings, room types and coordinates for a whole city, ready for pandas, Excel or a map.
  • Price monitoring and deal alerts: a daily cron job that prints the listings whose total price dropped.
  • Compare destinations: the same stay in Paris, Rome and Barcelona in one run.

Installation

You need Python 3.11 or later and a free Apify account (the free plan includes monthly credit).

git clone https://github.com/flatrow-data-studio/airbnb-scraper-python.git
cd airbnb-scraper-python
python3 -m venv .venv && source .venv/bin/activate
pip install -r requirements.txt
export APIFY_TOKEN="<your-apify-token>"   # Apify Console > Settings > API & Integrations

Run it

# 60 listings in Lisbon for 20-23 November 2026, 2 adults, prices in EUR
python scrape.py "Lisbon, Portugal" --check-in 2026-11-20 --check-out 2026-11-23 --currency EUR --max-results 60

# Three cities in one run, 30 listings each, entire homes under 150 EUR a night
python scrape.py "Paris, France" "Rome, Italy" "Barcelona, Spain" --currency EUR --max-results 30 \
    --room-type entire_home --price-max 150

The script writes airbnb_listings.csv (change it with --output) and prints the five cheapest listings. Without --check-in / --check-out it searches a stay that starts 30 days from today for 3 nights (--check-in-days, --nights), so the prices of every listing are for the same stay and the command never expires. python scrape.py --help lists every option; --max-charge 0.50 stops a run once it has cost 50 cents.

Track prices every day

python monitor_prices.py "Lisbon, Portugal" --check-in-days 30 --nights 3 --currency EUR

The first run records the total price of every listing as the reference (they all come back as new). From the second run on, only the new listings and the listings whose total changed are returned, with previousPrice, priceDelta and priceDeltaPercent; they are printed and appended to airbnb_price_changes.csv. The reference lives in a key-value store of your Apify account (--store, airbnb-price-monitor by default), so the script can run from cron on any machine:

0 7 * * * cd /path/to/airbnb-scraper-python && .venv/bin/python monitor_prices.py "Lisbon, Portugal" --currency EUR >> tracker.log 2>&1

Keep the same place, stay, guests and currency from run to run: changing them starts a new reference.

Sample output

One real row from a Lisbon search (USD, 20–23 November 2026, 2 adults), key columns only:

{
  "platformListingId": "29990558",
  "title": "Tram 28 - Marvelous Balcony & Tagus River Views 3D",
  "propertyType": "Apartment",
  "roomType": "entire_place",
  "city": "Lisbon",
  "checkIn": "2026-11-20",
  "checkOut": "2026-11-23",
  "currency": "USD",
  "pricePerNight": 135.45,
  "priceTotal": 407,
  "rating": 4.92,
  "reviewCount": 726
}

Columns

scrape.py writes these columns; lists such as badges are written as JSON text.

Column Meaning
platformListingId Airbnb listing id
title Listing title
propertyType Apartment, House, Loft...
roomType entire_place, private_room, shared_room or hotel_room
city City of the listing
checkIn Check-in date of the quoted stay
checkOut Check-out date of the quoted stay
nights Nights of the stay
currency Currency of every price
pricePerNight Nightly price
priceTotal Total price of the stay
priceBeforeDiscount Strike-through total before a discount
taxesAndFees Taxes and fees, on the European Airbnb sites
rating Average rating, out of 5
reviewCount Number of reviews
bedrooms Bedrooms
beds Beds
bathrooms Bathrooms
badges Badges such as Guest favorite or Superhost
latitude Latitude
longitude Longitude
searchLocation The place of your search that found the listing
url Listing link with your dates and guests

The dataset of each run has more columns (photos, region, country, cancellation flag, search rank...): add their names to COLUMNS in scrape.py. The full list is on the Actor page.

Pricing

The Actor is pay-per-event: from $1.50 per 1,000 listings on Apify's Free plan, lower on paid plans, with compute and proxies included. Apify's free monthly credit of $5 covers about 3,333 listings. You pay per listing saved and nothing else; --max-results caps every place of a run, and in price-tracking mode only the new and changed listings are saved and charged.

FAQ

Do I need to write a scraper or run a browser? No. The Actor runs in Apify's cloud and is kept up to date when Airbnb changes its pages; your script receives JSON rows.

Can I use the data from other languages or tools? Yes: the same Actor works from Node.js, from any HTTP client through the Apify API, from Make or Zapier, or by hand in Apify Console.

Is there personal data in the output? No. Rows contain listing facts, the average rating and the number of reviews; nothing about hosts or guests. Use the data for analysis, respect Airbnb's terms and the law of your country, and do not republish listings.

Related

Other Python examples by Flatrow Data Studio, all with a CSV export and a price tracker:

License

MIT, see LICENSE. Airbnb is a trademark of its owner; this project is not affiliated with Airbnb.

About

Airbnb scraper in Python: listings, nightly and total prices, ratings and availability to CSV, price tracker.

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages