Agoda Hotel Scraper — Prices, Reviews & Amenities | $5/1K avatar

Agoda Hotel Scraper — Prices, Reviews & Amenities | $5/1K

Pricing

from $4.85 / 1,000 hotels

Go to Apify Store
Agoda Hotel Scraper — Prices, Reviews & Amenities | $5/1K

Agoda Hotel Scraper — Prices, Reviews & Amenities | $5/1K

Collect Agoda hotel records from property pages and Cronos JSON API. Get rooms, amenities, scores, images, plus optional reviews. Use hotel names, URLs, or IDs; no Agoda login. Pricing: Free plan $0.005 per hotel record + $0.00005 per Actor Start event.

Pricing

from $4.85 / 1,000 hotels

Rating

0.0

(0)

Developer

Vitalii Bondarev

Vitalii Bondarev

Maintained by Community

Actor stats

0

Bookmarked

131

Total users

31

Monthly active users

17 hours ago

Last modified

Features

Limited permissions

Share

Agoda Hotel Scraper

Collect Agoda hotel records from property pages and Agoda's Cronos JSON API, including rooms, amenities, scores, images, and optional review comments. No Agoda login is required.

  • Compare hotel ratings, category scores, review distributions, and amenities.
  • Enrich travel apps and maps with rooms, coordinates, nearby places, amenities, and image URLs.
  • Monitor reputation with review scores, counts, distributions, and optional comments.
  • Search by hotel name, Agoda property URL, or numeric hotel ID.
  • The default configuration uses a RESIDENTIAL proxy through Apify’s proxy settings.

What you get

A field is null when unavailable; lists and objects use the empty values shown below.

Field familyFieldsTypeDescription
Identityhotel_id, hotel_name, former_name, accommodation_typeinteger, stringAgoda ID and property identity.
Locationaddress, city, country, area_name, postal_code, location_highlight, lat, lngstring, numberAddress, location, and coordinates.
Ratingsstar_rating, review_score, review_count, review_text, category_scores, score_distribution, awardsnumber, integer, string, objectRatings, counts, scores, bands, and awards; empty score objects are {}.
Pricingprice, currency, rooms_available, offer_count, room_offersnumber, string, boolean, integer, arrayDate-aware pricing and offers; room_offers is empty when none are returned.
Requested datescheck_in, length_of_staystring, integerRequested check-in and stay length; null without a valid check-in date.
Roomsroom_types, roomsarray of strings, arrayRoom names and details including room_id, name, bed, size, view, features, image_count, and thumbnail.
Amenitiesamenities, amenity_groupsarray of strings, objectFlat and grouped amenities; empty list/object when unavailable.
Nearby placeshighlights, nearby_attractions, nearby_essentialsarrayHighlights, attractions, essentials, and distance data.
Property contentcheck_in_time, check_out_time, descriptionstringCheck-in, check-out, and description.
Imagesimage_url, image_count, all_imagesstring, integer, array of stringsHero image, photo count, and image URLs.
Provenanceproperty_url, scraped_atstring, ISO 8601 stringSource URL and UTC scrape timestamp; property_url is null for a direct hotel ID.
Parse statusparse_confidence, warningsnumber, array of stringsParse score from 0.0 to 1.0 and drift signals.
Review commentsreviewsarrayOptional reviews containing review_id, rating, title, comment, positives, negatives, check_in_month, review_date, reviewer_type, reviewer_country, room_type, and stay_length.

Sample output

This shortened sample uses one dataset record. Whole fields and list items are omitted; the values shown are unchanged.

{
"hotel_id": 10715,
"hotel_name": "The Peninsula Bangkok",
"city": "Bangkok",
"country": "Thailand",
"star_rating": 5,
"review_score": 9.2,
"review_count": 5331,
"category_scores": {"cleanliness": 9.6, "facilities": 9.4, "location": 9, "roomComfort": 9.3, "staffPerformance": 9.5, "valueForMoney": 9},
"room_types": ["Deluxe Twin Room", "Deluxe King Room"],
"rooms": [{"name": "Deluxe Twin Room", "room_id": 7619240, "bed": "2 single beds", "size": "Room size: 45 m²/484 ft²", "view": "Sea view", "features": ["Room size: 45 m²/484 ft²", "Sea view", "2 single beds"], "image_count": 15, "thumbnail": "https://q-xx.bstatic.com/xdata/images/hotel/max500/668438342.jpg?k=cf470c4280e289e0fdad068e3f648ac416a80bc2a1b8dfe6b091f4c74b8318d6&o="}],
"amenities": ["English", "Chinese [Mandarin]", "Filipino"],
"nearby_essentials": [{"category": "Airports", "name": "Don Mueang International Airport (DMK)", "distance_km": 23.43, "distance_text": "23.43 km"}],
"parse_confidence": 1,
"warnings": [],
"scraped_at": "2026-10-26T16:27:30.286453+00:00"
}

Pricing

You pay for each hotel record and each Actor start. The primary event is apify-default-dataset-item, representing one Agoda hotel with prices, rooms, and review scores. Reviews are embedded in the hotel row when enabled and add no separate charge.

Planapify-default-dataset-itemapify-actor-start
Free$0.005 per hotel record on the Free plan$0.00005 per event on the Free plan
Bronze$0.00495 per hotel record$0.0000495 per event
Silver$0.0049 per hotel record$0.000049 per event
Gold$0.00485 per hotel record$0.0000485 per event
Platinum$0.0048 per hotel record$0.000048 per event
Diamond$0.00475 per hotel record$0.0000475 per event

The apify-actor-start event is charged once per GB of run memory, minimum one event. A one-result run (maxItems: 1) shows the exact charge with one Actor Start event.

On the Free plan, 1,000 hotel records cost 1,000 × $0.005 = $5.00 on the Free plan; 10,000 cost 10,000 × $0.005 = $50.00 on the Free plan. 1,000 Actor Start events cost 1,000 × $0.00005 = $0.05 on the Free plan; 10,000 cost 10,000 × $0.00005 = $0.50.

The Free plan’s $5 credit covers 999 hotel results, calculated with one Actor Start event. A Free-plan run delivers at most 5 hotel records, and every run has its own Actor Start event(s). On the Bronze plan, 1,000 hotel records cost 1,000 × $0.00495 = $4.95.

The Apify Free plan includes $5 of monthly platform usage credit. You pay only for the events listed above. This Actor does not use the Pay per event + usage option, so compute, proxy traffic, and storage are not billed separately.

On Free plans, review comments and live price lookup are disabled for preview runs. Paid Apify plans unlock full results, subject to maxItems.

How to use

  1. Choose searchTerms, Agoda propertyUrls, numeric hotelIds, or a combination.
  2. Enter a specific hotel name for searchTerms; Agoda’s suggest API resolves it to hotel IDs.
  3. Add a valid checkIn date in YYYY-MM-DD format for date-aware pricing.
  4. Set lengthOfStay, adults, and rooms for live pricing.
  5. Set includeReviews to true and choose reviewsPerHotel for comments on paid plans.
  6. Use maxItems to cap records and requestDelay to set the delay between property fetches.
  7. Check parse_confidence and warnings, then repeat the run through Apify Schedules; daily is a starting point for listings or prices.

This example needs a paid Apify plan: on the Free plan checkIn and includeReviews are ignored.

{
"hotelIds": [10715, 10571],
"checkIn": "2026-12-28",
"lengthOfStay": 1,
"adults": 2,
"rooms": 1,
"includeReviews": true,
"reviewsPerHotel": 10,
"maxItems": 2,
"requestDelay": 1.5
}

Export the Apify dataset as JSON or CSV, or read it through the Apify dataset API.

Input parameters

ParameterWhat it doesDefault
searchTermsHotel names or destinations resolved through Agoda’s suggest API; specific names work best.None
propertyUrlsAgoda property page URLs; extracts the hotel ID when possible.None
hotelIdsPositive numeric Agoda hotel IDs.None
checkInLive-pricing date in YYYY-MM-DD; without it, returns dateless metadata.Empty
lengthOfStayLive-pricing nights. Accepted range: 1–30.1
adultsLive-pricing adult guests. Accepted range: 1–20.2
roomsLive-pricing rooms. Accepted range: 1–10.1
includeReviewsFetches and embeds individual review comments.false
reviewsPerHotelMaximum comments per hotel. Accepted range: 1–50; ignored on the Free plan.10
maxItemsMaximum hotel records. Accepted range: 0–100000; 0 means no user-specified limit, but Free remains limited to 5.0
requestDelaySeconds between property fetches. Schema default is 1.5; code fallback when omitted is 0.3.1.5 in schema
proxyConfigurationProxy settings; default is useApifyProxy: true with apifyProxyGroups: ["RESIDENTIAL"].RESIDENTIAL proxy
disableUsageStatsSet to true to turn off the run summary in Usage statistics.false

Limits and edge cases

ConditionWhat you seeWhat to do
No propertyUrls, hotelIds, or searchTermsFailed run; no hotel record.Supply an input mode.
No specific search match or all inputs failSucceeded run with an empty dataset; OUTPUT has emptyReason and message as NO_MATCH_FOR_INPUT.Use a specific name, URL, or ID.
Broad destination search termOnly the few properties surfaced by the suggest API.Use property URLs or hotel IDs.
Non-Agoda property URLURL skipped with a warning.Provide a full Agoda property URL.
Property URL cannot yield a hotel IDhotel_id or hotelId query parameters can provide it; otherwise the page must contain the ID.Check the URL or provide numeric hotelIds.
Agoda blocks or a fetch failsRetried up to two times when proxy configuration is available; no row is produced.Use RESIDENTIAL and retry.
Some hotels fail after others are deliveredPartial result; OUTPUT contains stoppedEarly as BLOCK_PARTIAL or INPUT_PARTIAL.Check the message and retry unresolved inputs.
Block or fetch failure leaves no hotel deliveredFailed run; OUTPUT records BLOCKED; no hotel event is charged.Use RESIDENTIAL and retry.
Page loads but no hotel ID is readableFailed run; OUTPUT records PARSE_FAILED.Check URLs or provide hotelIds.
Rows are pushed during a long runBatches of 10 are pushed; the remainder follows the loop. Free pushes 5 rows; fewer than 10 hotels wait until processing finishes.Let the run finish for the current batch.
checkIn is missing or invalidDateless metadata; invalid dates are ignored.Provide a valid date for live pricing.
Live-price lookup failsHotel kept; price and currency are null, with requested dates retained.Retry or use the metadata.
Requested date is sold outPricing can be null; rooms_available can be false.Try another date or use the metadata.
Review fetching failsHotel kept with reviews as an empty list.Retry if comments are needed.
Duplicate hotel IDs are suppliedIDs are de-duplicated; the first-seen property URL is kept.No action is required.
Free plan is usedAt most 5 records; reviews and live price lookup are disabled.Use a paid Apify plan for full results.
Agoda’s JSON structure changesparse_confidence can decrease and warnings can identify drift.Inspect those fields before accepting records.
Public Agoda data is usedThe Actor retrieves public data from Agoda property pages and Agoda's JSON API without a login.Check whether your use is legal or allowed under applicable law and relevant source terms.

FAQ

How much does it cost to scrape Agoda hotels?

On the Free plan, hotel records cost $0.005 each and Actor Start events cost $0.00005 each. 1,000 hotel records cost $5.00 on the Free plan, and 1,000 Actor Start events cost $0.05.

Why did my run return no hotels?

Check the inputs and the run’s OUTPUT record. It stores the applicable reason under emptyReason and message, including NO_MATCH_FOR_INPUT, BLOCKED, and PARSE_FAILED.

What should I do if a hotel is not working?

Check the URL or ID, inspect the run message, use the default RESIDENTIAL proxy configuration, and retry.

The Actor retrieves public data from public Agoda property pages and Agoda's JSON API without a login. Whether a use is legal or allowed depends on your use case, jurisdiction, applicable law, and relevant source terms; this Actor provides no legal guarantee.

Usage statistics

This Actor creates a small, content-free summary at the end of each run, used only to monitor reliability and improve this Actor. No input values, credentials or scraped data are sent.

A copy of the exact record for your run is saved as USAGE_STATS in your own Apify key-value store.

To opt out, set disableUsageStats to true in the input. Nothing is sent then.

Full list of collected fields