Canary Islands Vacation Rentals Scraper (Property Listings) avatar

Canary Islands Vacation Rentals Scraper (Property Listings)

Pricing

from $2.50 / 1,000 property listing delivereds

Go to Apify Store
Canary Islands Vacation Rentals Scraper (Property Listings)

Canary Islands Vacation Rentals Scraper (Property Listings)

Public holiday-rental property listings from Las Casas Canarias in the Canary Islands: name, address, coordinates, images, island and advertised nightly price. For rental market research and price tracking. Sitemap-only discovery, schema.org JSON-LD and microdata, no browser and no proxies.

Pricing

from $2.50 / 1,000 property listing delivereds

Rating

0.0

(0)

Developer

Steadfetch

Steadfetch

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

5 hours ago

Last modified

Share

Public holiday-rental property listings from Las Casas Canarias, a local operator in the Canary Islands. One item per property page, with the advertised nightly from-price, address, coordinates, images and island.

What it does

  • Discovers property pages only from the sitemaps declared in the source's robots.txt (the Las Casas Canarias sitemap and the Salobre Golf Villas sitemap it declares). No on-site search, no category crawling and no /ajax.php.
  • Extracts each listing from the page's schema.org Hotel JSON-LD and LodgingBusiness microdata: name, address, latitude, longitude, images, island and the visible "from" price (ab 260,00 Euro/Nacht or desde ... EUR/noche).
  • Returns priceFromEur: null when a page has no advertised price pattern. The Actor never invents a price.
  • Drops landing pages (/espanol/..., /es/...), static pages and incomplete pages before they reach the dataset, so they are never billed.
  • Keeps a per-URL dedupe state in the named key-value store lascasascanarias-scraper-state under seen-urls-<apify-user-id> (seen-urls-local when no user ID is present). The user ID isolates tenants, so one customer's runs can never hide listings from another customer's runs. A later run delivers only URLs that were not delivered before. Clear that key to backfill.
  • Emits the common Steadfetch envelope (url, scrapedAt) on every item.
  • Requests run sequentially with a fixed 1000 ms delay (concurrency 1). No browser, no proxies, no logins, no paywall or CAPTCHA bypass.

Input

FieldTypeDefaultMeaning
maxResultsinteger 1-500100Maximum number of new listings to deliver.
urlsarray of 1-500 URLsomittedOptional property-page URLs. When omitted, discovery uses the sitemaps declared in robots.txt.

Only Las Casas Canarias and Salobre Golf Villas hosts are accepted in urls.

Example output

{
"url": "https://www.lascasascanarias.com/la-palma/ferienwohnungen/villa-crow-74524.html",
"scrapedAt": "2026-10-21T08:56:00.000Z",
"name": "Villa Crow",
"address": "Tijarafe, La Palma",
"latitude": 28.693141,
"longitude": -17.95586,
"priceFromEur": 260.0,
"currency": "EUR",
"images": [
"https://www.lascasascanarias.com/cmsAdmin/uploads/o_1f8t5fdq35udu8m1b812leg7711.jpg"
],
"island": "la-palma",
"source": {
"publisher": "LasCasasCanarias",
"url": "https://www.lascasascanarias.com/la-palma/ferienwohnungen/villa-crow-74524.html"
}
}

The images array in a real run contains every image URL published in the listing JSON-LD, not only the first one shown here.

  • robots.txt is read on every run. Its only wildcard rule is Disallow: /ajax.php; the Actor never requests it. Property pages and the declared sitemaps are allowed.
  • Discovery is limited to the sitemaps declared in robots.txt; undeclared routes are never crawled.
  • A 401, 403, 429 or 451 response, or a known challenge page, stops the run with an error. The Actor never tries to evade a block.
  • Public property pages only. No owner names, no telephone numbers, no private profiles and no personal data. Only name, address, coordinates, images, island and price are read.
  • The legal gate search performed before the build is recorded in docs/legal-gate.md.

Pricing

Pay per event, no monthly rent:

  • apify-actor-start: 0.00005 USD per run (Apify-recommended default).
  • apify-default-dataset-item: 0.0025 USD per new listing, i.e. 2.50 USD per 1,000 results.

There is no custom per-item event and no Actor.charge() call: the synthetic dataset event already charges per result, so a listing is never billed twice. Duplicate URLs, landing pages, incomplete pages and pages already seen are not delivered and not charged.

Measured cost per 1,000 results

Local measurement on 2026-10-21 against the live source (no platform credit):

  • A 20-page sequential run extracted 20 listings in 20.16 s, i.e. 1.008 s per page including the fixed 1000 ms politeness delay, in a 256 MB container.
  • 1,000 pages therefore take about 1,008 s = 0.28 hours = 0.07 compute units (1 CU = 1 GB-hour) at 256 MB. At Apify's published 0.20 USD per CU that is about 0.014 USD.
  • Pages are 277 KB uncompressed on average and about 33 KB compressed (measured sample: 285 KB to 33 KB). 1,000 pages are about 32 MB of compressed transfer, about 0.006 USD at 0.20 USD/GB.
  • 1,000 dataset writes add about 0.005 USD.
  • Measured cost basis: about 0.025 USD per 1,000 results (discovery adds four requests per run, negligible at 1,000 items). At 2.50 USD per 1,000 the gross margin is above 99%. The first paid platform run will replace this local estimate with the billed figure.

FAQ

Does it need a browser or a proxy? No. The source is static HTML; one plain HTTP GET per property page plus the robots and sitemap requests. A proxy can still be added at the platform level if the network requires it.

Why does a later run return zero or few items? The Actor dedupes by url in a named key-value store, so it only delivers URLs it has not delivered before. Delete seen-urls-<apify-user-id> (seen-urls-local when no user ID is present) from lascasascanarias-scraper-state, or use a fresh store, to backfill.

Why is priceFromEur null for some listings? The page has no visible "from" price and no JSON-LD priceRange. The Actor reports null; it never guesses or carries a price over from another page.

Are owner names or telephone numbers collected? No. Those fields are deliberately excluded even when present in the page, to keep the dataset free of personal data.

How fresh is the data? Every run reads the live public pages. The scrapedAt field is the UTC timestamp of that item's scrape.

Maintenance

This Actor is tested daily: an automated run checks that the source is reachable, that the declared sitemaps still expose property URLs and that every item passes the dataset schema. Failures become issues in the Steadfetch Actors repository. npm test, npm run publish:check, npm run build and apify-cli validate-schema run in CI on every push.

Source: public pages of www.lascasascanarias.com. Steadfetch runs no logins, no paywall bypass and no CAPTCHA evasion - see our company page for all Actors.