Airbnb & Booking Spain Tourist License Checker avatar

Airbnb & Booking Spain Tourist License Checker

Pricing

from $1.39 / 1,000 results

Go to Apify Store
Airbnb & Booking Spain Tourist License Checker

Airbnb & Booking Spain Tourist License Checker

Check the tourist licence number of Airbnb listings and Booking.com properties in Spain against the official regional registers (Catalonia, Andalusia, Valencia, Mallorca, Canary Islands, Madrid): verdict, registered holder, floor, door, authorised places — plus listing and host details.

Pricing

from $1.39 / 1,000 results

Rating

0.0

(0)

Developer

Nice Dev

Nice Dev

Maintained by Community

Actor stats

0

Bookmarked

1

Total users

0

Monthly active users

18 hours ago

Last modified

Share

🏠 What is Airbnb & Booking Spain Tourist License Checker?

Airbnb & Booking Spain Tourist License Checker checks the tourist licence number that each Airbnb listing and each Booking.com property in Spain displays against the official register of its region — Catalonia, Andalusia, the Valencian Community, Mallorca, the Canary Islands and the Community of Madrid — and tells you whether it is valid, never issued, withdrawn, used for another property or for more guests than allowed. Each result also gives what the register knows (registered holder, address, floor, door, cadastral reference, authorised places) and the listing's own details (host, business details of professional hosts, capacity, rating, amenities, price).

Type a place (Barcelona, Spain) and choose where to search it — Airbnb, Booking.com or both — draw a map area, paste Airbnb URLs, listing IDs or Booking.com URLs — or just give licence numbers — click Start, and download the results in JSON, CSV or Excel. No login, nothing to set up. Built for city councils, tourism inspectors, property managers, landlords' associations, investors and journalists.

📋 What data can you extract from Airbnb, Booking.com and the Spanish tourist registers?

One item per listing checked (or per licence number given alone), 109 fields:

CategoryWhat you get
✅ Verdictvalid, never issued, not in the register, other property, over capacity, national number mismatch, exempt claimed… with the reasons and one plain sentence
🪪 Licence numbersthe regional and national (NRUA) numbers shown on the listing, the issuing authority, the exemption claimed, other listings of the run showing the same number — on Airbnb or on Booking.com (the same home listed on both shows up there)
🏛️ Official registerregistered holder and its tax ID (companies' CIF; the operator in Mallorca with its NIF / NIE), address, floor, door, postal code, municipality, cadastral reference, registration date, authorised places, bedrooms, surface, position and distance to the listing, source and date of the register
🏠 Listingtitle, type of place, city, position, guests, bedrooms, beds, bathrooms, rating and sub-ratings, badges, highlights, house rules, where you'll sleep, description, amenities, photos; on Booking.com: street address, every licence number and sentence shown, professional or private host
👤 Hostname, profile link, business or individual, verified, years hosting, response rate and time, rating, reviews, co-hosts, how many listings they manage
🏢 Business host detailsbusiness name, business registry, tax identification number, e-mail, phone and address that professional hosts must show in the EU
💶 Pricetotal price of the stay, price per night, price breakdown, dates (from the search results)

Every field, with an example, is listed in the Output section below.

✅ Why use Airbnb & Booking Spain Tourist License Checker?

  • 🏛️ The official registers, not a format check: each number is looked up in the open data of its regional government, downloaded fresh at each run.
  • 🔎 Finds what a glance cannot: numbers higher than any number ever issued, numbers of another region, numbers of another flat or town and listings taking more guests than the licence allows (where the register gives the position and the places: see What the registers can and cannot say), national numbers quoting another licence.
  • 🗂️ Seven ways in, in one run: places (on Airbnb, Booking.com or both), map areas, search URLs, listing URLs, listing IDs, Booking.com URLs and licence numbers alone.
  • 🏨 Airbnb and Booking.com side by side: the same registers and the same verdicts for both sites; a licence number shown by listings of both sites is flagged in numberSharedWith; Booking.com properties that say they need no licence are flagged exempt_claimed.
  • 🗺️ Whole cities: Airbnb shows 270 listings per search; a full area is cut into smaller ones automatically to reach the others.
  • 🏢 Professional hosts identified: business name, tax ID, e-mail and phone of the hosts who declare themselves as a business.
  • 🔔 Monitoring built in: tick Only new listings, schedule the Actor, and each run returns (and charges) only the listings it has never delivered before.
  • 🔌 API, scheduling, integrations (Make, Zapier, n8n, Google Sheets…) and JSON/CSV/Excel export via the Apify platform.

🚀 How to check Airbnb tourist licences in Spain

  1. Create a free Apify account.
  2. Open Airbnb & Booking Spain Tourist License Checker and type a Place (e.g. Barcelona, Spain).
  3. Choose the Sites searched for your places: Airbnb (default), Booking.com, or both.
  4. Or paste Airbnb URLs (search results or single listings), listing IDs, Booking.com URLs, map areas, or licence numbers to check without any listing.
  5. Set Max results (100 by default, 0 = no limit) — and keep only the suspicious listings with Keep only these verdicts — then click Start.
  6. Download the dataset in JSON, CSV, Excel or via API.

💰 How much does it cost to check Airbnb licences?

This Actor uses pay per event pricing: a price per result (a listing checked, or a licence number checked), a small fee per run start, a fee per host profile (Host's listing count, one per host whose profile reaches your results, not per listing), a fee per Booking.com property checked (booking-listing, on top of the result, charged only once the Pricing tab lists it) and a lower fee for each listing a filter of the Actor drops — filter-check when the search results are enough to drop it (minimum rating, host type, excluded words), detail-filter-check when its page and register had to be read (verdicts, regions; also a licence number given alone that these filters drop). A listing you keep costs its normal price: filtering never costs more than taking everything. With a maximum cost per run, the listings already kept are paid first: the filter checks only spend what they leave. The prices are shown on the Pricing tab of this page. Platform usage (compute, proxy) is included in the price.

⚙️ Input

A place, only the listings whose licence does not match the register:

{
"location": "Barcelona, Spain",
"maxItems": 200,
"onlyVerdicts": ["never_issued", "not_in_register", "other_property", "over_capacity", "national_mismatch"]
}

Several places and a map area, a cap per search, only the listings not delivered before:

{
"locations": ["Málaga", "Marbella"],
"boundingBoxes": ["41.37, 2.15, 41.40, 2.19"],
"maxItems": 300,
"maxItemsPerQuery": 100,
"onlyNew": true,
"memoryName": "costa-del-sol"
}

Both sites for the same places, Booking.com apartments and holiday homes only:

{
"locations": ["Valencia", "Málaga"],
"sources": ["airbnb", "booking"],
"bookingPropertyTypes": ["apartment", "holiday_home"],
"maxItems": 400,
"maxItemsPerQuery": 100
}

Your own URLs, listing IDs, Booking.com URLs, and licence numbers alone:

{
"startUrls": [
{ "url": "https://www.airbnb.com/s/Palma--Spain/homes?adults=2" },
{ "url": "https://www.airbnb.es/rooms/846093318788581404" }
],
"listingIds": ["16592830"],
"bookingUrls": ["https://www.booking.com/hotel/es/la-roqueta.html"],
"licenseNumbers": ["HUTB-064079", "VFT/MA/48725", "CV-VUT0052409-V", "ETV/9960"],
"maxItems": 500
}
FieldNotes
startUrlsAirbnb search results pages (filters kept, pagination and map splitting automatic) or single listing pages, any Airbnb domain.
listingIdsAirbnb listing IDs alone (the digits after /rooms/). Checked in the order given and before any search: with maxItems, the first ones are the ones saved.
bookingUrlsBooking.com property pages (e.g. https://www.booking.com/hotel/es/la-roqueta.html, any language version), checked in the order given, like listing IDs.
location, locationsPlaces as typed in the site's search box (e.g. Barcelona, Spain, Málaga); one search each and per site.
sourcesSites the places are searched on: airbnb (default), booking, or both. Airbnb URLs, IDs and map areas always go to Airbnb, Booking.com URLs to Booking.com.
boundingBoxesMap rectangles south, west, north, east (e.g. 41.37, 2.15, 41.40, 2.19): the surest way to cover a whole city.
licenseNumbersLicence numbers checked against the registers without any listing (e.g. HUTB-064079, VFT/MA/48725, ETV/9960). One result per licence: two spellings of the same number (HUTB-064079, hutb 64079) are checked once.
maxItemsStop after this many results for the whole run (0 = unlimited).
maxItemsPerQueryCap for EACH search (place and site, map area or search URL). 0 = no per-search cap — except when the run searches both sites (places on both, or a place on Booking.com next to an Airbnb map area or search URL): maxItems (less the licence numbers checked alone) is then shared evenly between the searches.
splitMapCut a full Airbnb search (270 listings) into smaller map areas, and read a Booking.com search over 1,000 properties district by district, to reach the others (default on).
checkIn, checkOut, adults, children, infants, petsTravel dates and guests sent to Airbnb's search (e.g. 2026-10-12, today or later in Spain); the price of the stay then follows them, and checkIn / checkOut of each listing are these dates.
currency, priceMin, priceMaxCurrency of the prices (EUR, USD, GBP; a pasted search URL keeps its own currency, and each row names it) and price per night bounds.
roomTypesAirbnb's type of place: entire_home, private_room, shared_room, hotel_room.
propertyTypesAirbnb's property type: house, apartment, guesthouse, hotel.
minBedrooms, minBeds, minBathrooms, superhostOnlyAirbnb's own filters: at least this many rooms, Superhosts only.
bookingPropertyTypesKinds of Booking.com properties searched: apartment, holiday_home, villa (default), also chalet, country_house, farm_stay, guesthouse, homestay, bed_and_breakfast, condo_hotel, hotel, hostel.
onlyVerdictsKeep only the listings with these verdicts (e.g. never_issued, not_in_register, over_capacity).
regionsKeep only the listings of these regions (catalonia, andalusia, valencia, mallorca, canary_islands, madrid, other).
hostTypeany, business or individual hosts (Booking.com: professional or private, as the host declared).
minRating, excludeKeywordsMinimum rating out of 5 (Booking.com scores out of 10 are halved); words that drop a listing whose title contains them.
gpsToleranceKmDistance above which a register record is another property (1.5 km by default: Airbnb blurs positions).
includeHostProfileRead each Airbnb host's profile once for the number of listings they manage (default off: tick it to get the host's listing count and listing IDs, charged per host profile).
onlyNew, memoryName, resetStateMonitoring: only the listings never delivered under this memory name; resetState forgets the memory.
AdvancedproxyConfiguration (Apify proxy by default, included in the price; the residential proxy is not available), maxConcurrency, maxRequestsPerMinute, minRequestIntervalMs, maxRequestRetries, debugLog.

📦 Output

A real result (shortened: some fields and list entries left out):

{
"id": "846093318788581404",
"source": "airbnb_listing",
"url": "https://www.airbnb.com/rooms/846093318788581404",
"title": "Cozy apartaments Plaza España, 3 bedrooms",
"verdict": "valid",
"verdictReasons": [],
"verdictNote": "HUTB-064079 is in the Catalan register (Barcelona, floor 3, door 1).",
"isSuspicious": false,
"region": "catalonia",
"registrationText": "Spain – National registration number | ESFCTU0AD10806700043751100000000000000HUTB-064079-092 | Barcelona – …",
"licenseAuthority": "Barcelona",
"regionalNumber": "HUTB-064079",
"regionalNumberNormalized": "HUTB-064079",
"nationalNumber": "ESFCTU0AD10806700043751100000000000000HUTB-064079-092",
"nationalNumberType": "tourist",
"nationalNumberQuotes": "HUTB-064079",
"licenseNumbersShown": [],
"licensePhrases": [],
"numberSharedWith": [],
"registerFound": true,
"registerNumber": "HUTB-064079",
"registerType": "Habitatges d'ús turístic",
"registerHolder": "INMOBILIARIA GALLARDO SL",
"registerHolderTaxId": "B08109563",
"registerAddress": "Carrer TARRAGONA 84 esc. A",
"registerFloor": "3",
"registerDoor": "1",
"registerPostalCode": "08015",
"registerMunicipality": "Barcelona",
"registerPlaces": 5,
"distanceKm": 0.1,
"registerHighestNumber": 79999,
"registerSource": "Generalitat de Catalunya — Registre de Turisme de Catalunya (t2h3-cgys)",
"registerUpdatedAt": "2026-07-31",
"propertyType": "Entire serviced apartment",
"roomType": "Entire home/apt",
"city": "Barcelona",
"latitude": 41.37953,
"longitude": 2.1466,
"personCapacity": 5,
"bedrooms": 3,
"rating": 4.73,
"reviewsCount": 3145,
"badges": [],
"highlights": [
"Top rated by guests from Ireland",
"Self check-in"
],
"houseRules": [
"Check-in after 16:00",
"Checkout before 11:00"
],
"sleepingArrangements": [
"Bedroom 1: 1 double bed",
"Bedroom 2: 1 single bed"
],
"amenities": [
"Hairdryer",
"Shampoo"
],
"images": [
"https://a0.muscache.com/im/pictures/miso/Hosting-846093318788581404/original/d5cf8e54-a36d-4d1f-9240-d858df276b3c.jpeg",
"https://a0.muscache.com/im/pictures/miso/Hosting-846093318788581404/original/8e1af549-52fd-4f66-9bc7-9e44f7078e40.jpeg"
],
"hostName": "Arrivo Apartments",
"hostType": "business",
"coHosts": [],
"hostListingsCount": 1,
"hostListingIds": [
"846093318788581404"
],
"businessName": "ASPASION SHORT RENTALS",
"businessEmail": "arrivostay@aspasios.com",
"businessPhone": "+34 635 79 03 53",
"priceDetails": [],
"scrapedAt": "2026-09-25T22:13:53.262Z"
}

A Booking.com property (shortened: the Airbnb-only fields are null or empty):

{
"id": "booking-2652492",
"source": "booking_listing",
"url": "https://www.booking.com/hotel/es/la-roqueta.html",
"title": "La Roqueta completo en pleno centro",
"verdict": "valid",
"verdictReasons": [],
"verdictNote": "CV-VUT0041701-V is in the Valencian register (VALÈNCIA, floor 02, door 02). The register gives no position for it: the distance to the listing was not checked. Booking does not give the number of guests: it was not compared with the 4 authorised places.",
"isSuspicious": false,
"region": "valencia",
"registrationText": "License number: ESFCTU0000460630002825710000000000000CV-VUT0041701-V7, VT-41701-V",
"regionalNumber": "VT-41701-V",
"regionalNumberNormalized": "VUT41701-V",
"nationalNumber": "ESFCTU0000460630002825710000000000000CV-VUT0041701-V7",
"licenseNumbersShown": ["ESFCTU0000460630002825710000000000000CV-VUT0041701-V7", "VT-41701-V"],
"licensePhrases": ["License number: ESFCTU0000460630002825710000000000000CV-VUT0041701-V7, VT-41701-V"],
"numberSharedWith": [],
"registerFound": true,
"registerNumber": "CV-VUT0041701-V",
"registerFloor": "02",
"registerDoor": "02",
"registerMunicipality": "VALÈNCIA",
"registerPlaces": 4,
"propertyType": "Apartment",
"city": "València",
"address": "Carrer de Cervantes 6, 2",
"latitude": 39.4682238806482,
"longitude": -0.381170315667987,
"rating": 4.5,
"reviewsCount": 113,
"hostType": "individual",
"isTrader": false,
"bookingId": "2652492",
"bookingPageName": "la-roqueta",
"searchUrl": "https://www.booking.com/searchresults.html?ss=Valencia&nflt=ht_id%3D201%3Bht_id%3D220%3Bht_id%3D213&page=1",
"scrapedAt": "2026-09-26T12:44:17.918Z"
}

You can download the dataset in various formats such as JSON, HTML, CSV or Excel. The Overview, Register record and Hosts and business details views of the Output tab show the main columns.

All 109 fields

FieldsWhat you get
id, source, url, titleResult: Airbnb id, booking- + the Booking.com property id (or the licence number given alone), airbnb_listing / booking_listing / license_number, listing link, title
verdict, verdictReasons, verdictNote, isSuspicious, regionVerdict: see the table of verdicts below; the reasons found; one sentence; the region
registrationText, licenseAuthority, regionalNumber, regionalNumberNormalized, nationalNumber, nationalNumberType, nationalNumberQuotes, exemption, numberSharedWithLicence numbers: the block as shown, the authority, the regional number as written and the key it is looked up under (the register's own spelling is registerNumber), the national number, tourist / non_tourist, the regional number it quotes (without its check digit), the exemption claimed, the other listings of the run (Airbnb or Booking.com) with the same number
licenseNumbersShown, licensePhrasesBooking.com: every licence number the property shows (a building of flats may show several), and the sentences shown with them
registerFound, registerNumber, registerType, registerHolder, registerHolderTaxId, registerNameRegister: found or not, the number, the category, the holder (companies with their CIF, the operator in Mallorca with its NIF / NIE), the registered name
registerAddress, registerFloor, registerDoor, registerPostalCode, registerMunicipality, registerCadastralRefWhere the licence is: Carrer TARRAGONA 84, 3, 1, 08015, Barcelona, cadastral reference
registerDate, registerPlaces, registerBedrooms, registerSurfaceM2registration date, authorised places, bedrooms, surface in m²
registerLatitude, registerLongitude, distanceKm, registerHighestNumber, registerSource, registerUpdatedAtposition of the registered property, km to the listing, highest number issued in its numbering (a Catalan HUT or LL number: every territory), source and date of the register
propertyType, roomType, city, address, latitude, longitude, locationText, locationDescriptionListing: Entire serviced apartment, Entire home/apt, city, street address (Booking.com), position (blurred by Airbnb), area, the host's text about the neighbourhood
personCapacity, bedrooms, beds, bathrooms, sleepingArrangementsguests, rooms, where you'll sleep
rating, reviewsCount, ratingAccuracy, ratingCheckin, ratingCleanliness, ratingCommunication, ratingLocation, ratingValueratings out of 5 (Booking.com's score out of 10, halved) and number of reviews
isSuperhost, isGuestFavorite, isNewListing, homeTier, badges, highlightsSuperhost, Guest favourite, new listing, tier, search badges, highlights
description, descriptionLanguage, houseRules, amenities, imagesfull description, its language, house rules, amenities, photo links
hostId, hostName, hostUrl, hostType, isTrader, hostIsVerified, hostYearsHostingHost: id, name, profile link, business / individual, professional host on Booking.com, verified, years hosting
hostResponseRate, hostResponseTime, hostRating, hostReviewsCount, hostAbout, hostPictureUrl, hostLocation, coHostsresponse rate and time, rating and reviews over all their listings, presentation, photo, where they live, co-hosts
hostListingsCount, hostListingIdshow many listings they manage, the IDs their profile shows (10 at most)
businessName, businessRegistry, businessTaxId, businessEmail, businessPhone, businessAddressBusiness host details (EU rule for professional hosts)
price, currency, pricePerNight, priceText, priceDetails, priceNights, checkIn, checkOutPrice from the search results: total, currency, per night, as shown, breakdown, nights, dates
bookingId, bookingPageNameBooking.com: the property id and the name of its page
searchUrl, scrapedAtthe search the listing was found by, time of the check

💡 Tips

What each verdict means

When a listing has several problems, its verdict is the highest one in this table, and verdictReasons lists them all.

VerdictMeaning
validThe number is in the register of its region; the registered property is near the listing and the guests fit the authorised places, when the register gives them (otherwise verdictNote says what could not be checked).
never_issuedNot in the register, and higher than any number its numbering has reached, even counting what it may have issued since the register's copy (a Catalan family such as HUT or LL is numbered across all its territories): an invented number.
not_in_registerWell-formed but not in the register: withdrawn, or invented below the highest number (the open registers list active licences only) — or just above it, issued after the register's copy (verdictNote says so).
other_propertyThe number belongs to a property far from the listing (more than Distance tolerance), or to another region.
over_capacityThe listing takes more guests than the licence allows.
national_mismatchThe national (NRUA) number quotes another regional number, or is not a real one.
unknown_formatThe text shown is not a licence number of the region (a declaration file number, free text).
no_numberThe listing shows no registration number, or only a national number without any regional number in it.
exempt_claimedThe listing says it is exempt (hotel, hostel, seasonal rental…; on Booking.com, that it needs no short-term rental licence).
other_registerA hotel or apartment-block number of a register this Actor does not read (the Mallorca, Valencian and Canary Islands files list tourist homes only).
region_not_coveredOutside the six regions checked (e.g. Ibiza, the Basque Country, Murcia), or outside Spain (a French or Portuguese home next to the border): the number is given, not checked.
register_unavailableThe register could not be downloaded in this run (or what came back was not the register: a web page, a file without any licence number).

How to cover a whole city

Airbnb shows at most 270 listings per search. With Split full areas on (default), a full search is cut into 4 smaller map areas, again and again, until each shows everything. A place's area is Airbnb's own map of it, which does not always cover the whole town: add Map areas (boundingBoxes) to be sure.

Booking.com shows at most 1,000 properties per search. With Split full areas on, a bigger search is also read district by district (Booking.com's own districts, which overlap and do not cover every street: 87 % of Barcelona's 2,723 apartments with half of its districts, September 2026). A place is Booking.com's own match for what you type: prefer a town (Palma de Mallorca, Sóller) to an island or a region.

Airbnb and Booking.com

Tick both sites in Sites searched to check the same places on both: every place gives one Airbnb search and one Booking.com search, each with its own Max listings per search — left at 0, Max results (less the licence numbers checked alone) is shared evenly between them. A Booking.com property goes through the same registers and verdicts as an Airbnb listing, with what Booking.com shows instead of Airbnb's page:

  • Several numbers: a building of flats may show one licence per flat. The first regional number is checked; all are in licenseNumbersShown, and verdictNote says so.
  • No licence needed: a property that says it needs no short-term rental licence, or shows Exempt / Exento in place of a number, gets exempt_claimed (in Valencia, 1 apartment in 5 said so in September 2026).
  • A check digit too many (on Airbnb listings too): a regional number copied from the national one keeps its last digit (VFT/MA/279277 for VFT/MA/27927): checked without it, and verdictNote says so — only when the national number shown ends with that digit, words typed after it aside (a Valencian one puts it after the province: its numbers are never shortened).
  • No number of guests: Booking.com does not give it, so over_capacity is never raised for a Booking.com property.
  • No host profile: the host's name, profile and business details are Airbnb's; Booking.com gives only whether the host is a professional (isTrader).

Booking.com properties are far more often listed with a valid number than Airbnb listings (in Barcelona, all 61 numbers read in September 2026 were in the register, against 58 of 83 on Airbnb).

How to reduce costs

The levers are maxItems, maxItemsPerQuery, Keep only these verdicts (a listing dropped costs only the filter fee), leaving Host's listing count off (the default), onlyNew for recurring runs (you never pay twice for the same listing), and searching only the site you need.

Several searches in one run

Fill locations and / or boundingBoxes, or paste several search URLs: one search each (up to 100 places, 100 map areas and 1,000 URLs per run). A listing found by several searches is saved — and charged — once. Set maxItemsPerQuery to give every search its own cap.

Monitoring: only the new listings

Tick Only new listings (onlyNew) and schedule the Actor. The first run returns everything; each later run skips the listings already delivered: they are not saved, not charged, and their page is not even opened. The memory lives in a named key-value store of your account (airbnb-spain-license-checker-seen, up to 150,000 listings per memory name) and is only updated with listings that really reached the dataset. Give each schedule its own memoryName (Memory name), and tick resetState once to start over. A listing whose licence changed is not returned again, even if you paste its URL or ID: to re-check known listings, give their IDs in a run without Only new listings (or with another memoryName (Memory name)).

What the registers can and cannot say

The open registers list the active licences: a number that is absent was withdrawn or never registered, and the register does not say which (not_in_register); a number above the highest ever issued was never issued (never_issued) — unless it is close enough above to have been issued since the register's copy (the Catalan register is published monthly, sometimes late): it is then not_in_register, and verdictNote gives the copy's date. Positions are blurred by Airbnb by a few hundred metres: other_property is only raised past Distance tolerance. The Community of Madrid gives few numbers on Airbnb (many listings claim a seasonal-rental exemption). The national register (NRUA) is compared with the regional number it quotes; it is not checked on its own.

The registers do not all say the same things. A number of another flat or town is found only where the register gives a position, too many guests only where it gives the places (share of the records, registers of September 2026):

RegisterPosition (distance check)Authorised places (guests check)Holder namedRegistration date
CataloniaBarcelona city only (1 tourist home in 10)1 tourist home in 3companies only (1 in 5): people are maskedno
Andalusia94 %all17 %yes
Valencian Communitynoallnoyes
Mallorca1 in 297 %91 %yes
Canary Islands2 in 3allnono
Community of Madridnononono

🔌 Integrations and API

Call the Actor via the Apify API, the JavaScript or Python clients, or connect it with integrations and webhooks (Make, Zapier, n8n, Google Sheets, Slack, Airtable…). The dataset can be fetched as JSON or CSV from any tool.

🤖 Use with AI agents (MCP)

AI agents (Claude, ChatGPT, Cursor…) can find and run this Actor through the Apify MCP server, billed to their Apify account like any run. It returns one item per Airbnb listing or Booking.com property checked (or per licence number). Actor id: nice_dev/airbnb-spain-license-checker; MCP server with this Actor only: https://mcp.apify.com/?tools=fetch-actor-details,nice_dev/airbnb-spain-license-checker.

Smallest input, for a cheap first call:

{
"licenseNumbers": ["HUTB-064079"],
"location": "Sóller, Mallorca",
"maxItems": 5
}

Key output fields: url, verdict, verdictNote, regionalNumber, registerHolder, registerPlaces, personCapacity, hostName.

Cost: see the prices on the Pricing tab. Cap each call with maxItems and, through the API, with the run option maxTotalChargeUsd.

❓ FAQ

The Actor only reads what Airbnb and Booking.com show publicly to any anonymous visitor, and the open data the regional governments publish for reuse (Catalonia, Andalusia, the Valencian Community, Mallorca, the Canary Islands, the Community of Madrid; each result names its source and date, as their licences ask). It logs in to nothing. Results can contain personal data (host names, the holder named by the Andalusia register, the operator named by the Mallorca register with the NIF / NIE that register publishes), which is protected by GDPR: do not store it without a legitimate reason. You are responsible for using the data in compliance with Airbnb's and Booking.com's Terms of Service and applicable law. This Actor is not affiliated with Airbnb, Booking.com or any Spanish administration.

Does it need a login or a proxy?

No login. The proxy is included in the price: leave the default setting (the residential proxy is not available). A request the site turns away is retried at once on a new proxy session, up to 10 times on top of the retries (without a proxy, after a pause of 5 seconds, doubled at each retry up to 150 seconds).

Is the data safe to open in Excel or to show on a web page?

Titles and descriptions are the hosts' own words, copied as they are; the register fields are copied as each register writes them. A text can begin with -, +, = or @ (a phone number starts with +, a floor in the Catalan register can be -1 or +1): Excel and Google Sheets may read such a cell of a CSV file as a formula or as a number, and a postal code such as 08015 loses its first 0. The Actor leaves the text as it is, so that the JSON and the API give the real value: when you open a CSV, import these columns as text. On a web page, escape every field like any text written by a stranger.

Known limitations

  • The price comes from Airbnb's search results: listings given by URL or ID, and Booking.com properties, have none.
  • A Booking.com property pasted by URL gets its position, address and photo from one more request: if it fails, the property is still checked, and verdictNote says the distance could not be.
  • The business details are shown by Airbnb only for the hosts who declare themselves as a business.
  • A host profile shows 10 of its listings at most: hostListingsCount is the full count, hostListingIds the first ones.
  • onlyNew remembers listing ids, not their content: a listing whose licence changed is not returned again.
  • Ibiza, Menorca, the regions outside the six covered and the homes outside Spain get region_not_covered. The region of a listing without Airbnb's label comes from its position, read against the limits of the autonomous communities (© Instituto Geográfico Nacional, CC BY 4.0); a home a kilometre or so from a regional limit can land on the wrong side, and one across the French or Portuguese border is told apart by its page (Airbnb) or its address (Booking.com).

A run that reaches its timeout stops itself about 45 seconds before it: no new page is asked, what it read is saved and, with onlyNew, remembered, and the run ends Succeeded with "Stopped before the run's timeout". Resurrect it to go on from there, or give the next run a longer timeout (Run options). At the pace measured on the platform (1,000 listings in under 10 minutes), an hour holds several thousand listings.

A run the platform stops without warning (out of memory)

  • Resurrect it: it goes on from where it stood at most a minute before the stop. What it had read since is read again, and the listings already saved are skipped: none is delivered or charged twice, and maxItems still counts them.
  • With onlyNew, the memory is saved once a minute: resurrect the stopped run and the listings it had saved meanwhile join the memory; leave it stopped for good, and the next run may return up to a minute of them once more.

Something doesn't work?

The last line of the log counts the results saved, filtered out and no longer on Airbnb or Booking.com (removed while the run was reading them), and the requests that failed after every retry. Those requests and the removed listings are listed, with the reason, in the FAILED_REQUESTS record of the run's key-value store. A run that saved nothing and had failed requests fails, and its last message gives the cause. A register that cannot be downloaded does not fail the run: its listings get register_unavailable. A register is downloaded when the first listing of its region comes (Andalusia's takes about 80 seconds): meanwhile the log shows … waits for a register still downloading: read again for the listings of that region — they are read again once it is there, nothing is lost or charged twice.

If Airbnb or Booking.com changes its pages, you are told instead of paying for blank rows. A results page that gives no listing the Actor can read is an error (listed in FAILED_REQUESTS), never a quiet "No listings found". If the first 20 listings read all lack their title, position, guests, room type, host, photos or registration block (hotels aside) — on Booking.com: their title, position, registration block (hotels and guest houses aside), property type or host type — the run saves nothing more, stops and fails, and its last message names the missing field: at most those first listings are charged. A listing a filter drops because such a field is missing counts among those 20. If Booking.com's API no longer accepts the Actor's request (a field it renamed), or no longer answers at its address, the run stops at once and fails with that reason, instead of trying every property again.

🛟 Support

Open an issue in the Issues tab with a link to your run: the run log and the FAILED_REQUESTS record of the key-value store show exactly which URLs failed and why.