Canary Islands Vacation Rentals Scraper (Property Listings)
Pricing
from $2.50 / 1,000 property listing delivereds
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
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
5 hours ago
Last modified
Categories
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
HotelJSON-LD andLodgingBusinessmicrodata:name,address,latitude,longitude,images,islandand the visible "from" price (ab 260,00 Euro/Nachtordesde ... EUR/noche). - Returns
priceFromEur: nullwhen 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-stateunderseen-urls-<apify-user-id>(seen-urls-localwhen 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
| Field | Type | Default | Meaning |
|---|---|---|---|
maxResults | integer 1-500 | 100 | Maximum number of new listings to deliver. |
urls | array of 1-500 URLs | omitted | Optional 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.
Legal and robots compliance
robots.txtis read on every run. Its only wildcard rule isDisallow: /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.