Use caseWorkflow automationDocument AI
Guest registration, police reporting and tourist tax handled before check-in, in Spain and Italy
Collects guest ID data before arrival, reads the passport MRZ, validates it, submits to SES.Hospedajes or Alloggiati Web, and adds the tourist tax to the bill.
A blueprint, not a client story. The business described is illustrative; the architecture, integrations and trade-offs are real, and this is how I would build it. By Ergini, .
The short version
A workflow for hotel and short-term rental groups in Spain and Italy that handles the guest registration the law requires. A pre-arrival link collects each guest's details, reads the machine-readable zone of the passport or ID card and validates it. The build reports the data to SES.HOSPEDAJES or Alloggiati Web within the legal deadline, calculates the city's tourist tax, writes both to the PMS and keeps an audit log. The front desk handles refusals, rejections and anything that does not validate.
- Best for
- Groups running apartments and small hotels in more than one country or on more than one PMS, where guest registration is still typed in by hand.
- Connects to
- PMS (Mews, Apaleo, Cloudbeds, Guesty), WhatsApp Business Platform, Gmail and Google Workspace, SES.HOSPEDAJES, Alloggiati Web, Pre-arrival form
- The AI does
- Reads document photos where the machine-readable zone is missing or unreadable, and answers guests' questions about the form in their own language.
- People do
- Check guests against their documents where the property requires it, handle refusals and rejected records, and file the tourist tax returns.
- Built as
- AI Workflow Automation, usually $15K - $30K
Twelve properties, two police systems and a phone full of passports
Take a group with twelve properties: seven apartment buildings in Barcelona and Palma, managed in Guesty, and five small hotels in Bologna and Verona that came with an acquisition and still run on Mews. Guests book through the large booking platforms and the group's own site, and many arrive late, after the apartment office has closed.
Both countries make the host responsible for identifying guests and reporting them to the police. Spain's Royal Decree 933/2021 requires lodging businesses to send booking and traveler data to SES.HOSPEDAJES immediately and in any case within 24 hours, counted from the booking or from the start of the stay, and to keep the records for three years. In Italy, article 109 of the public security law (TULPS) requires guest details to reach the police through Alloggiati Web within 24 hours of arrival, and sooner for stays of a day or less. Add the tourist tax each region or city sets, and one arrival creates three obligations before anyone has unpacked.
Today the staff do all of it by hand. Apartment guests send passport photos by WhatsApp, which then stay in a work phone's gallery. Night porters in the hotels photocopy documents and type them into the portal the next morning. The tourist tax is worked out at checkout from a spreadsheet of city rules. It holds together until a Friday with forty arrivals, a surname spelled three different ways, and an inspection that asks for last month's receipts.
Arrival at 23:40, then and now
Today
- The guest sends a passport photo from the taxi, and it stays in a staff phone's gallery indefinitely
- Details are typed into SES.HOSPEDAJES or Alloggiati Web the next morning, from photos or photocopies, double surnames spelled however the typist reads them
- Children and group members get missed, because nobody counted who actually walked in
- The tourist tax is calculated at checkout, and exemptions depend on who remembers the city's rules
With the workflow
- Each guest completes a short form before arrival, the ID's machine-readable zone is read and checked, and the photo is deleted once the data is confirmed
- Every record is validated against the receiving system's rules and code tables before anything is sent
- Reports go out when the stay starts, and the official result is stored against the booking, where the desk sees who is still missing
- The tourist tax is calculated per guest and night and is on the folio before arrival
Same family, two countries: what each system expects
One pre-arrival form serves both countries, but it asks each guest only for what their property's country requires. That is a data minimization decision as much as a convenience.
| Question | Spain: SES.HOSPEDAJES | Italy: Alloggiati Web |
|---|---|---|
| Legal basis | Royal Decree 933/2021 | Article 109 TULPS |
| What is reported | The booking, then every traveler: name, both surnames, sex, document type, number and support number, nationality, date of birth, home address, phone, email, and the relationship of any minor to the adult | One fixed-width record per guest: surname, name, sex, date and place of birth, citizenship, document type, number and place of issue, arrival date and nights of stay |
| Children and groups | Every traveler is reported, minors with their relationship to the adult | Family and group members are linked to a head of family or group, and only the head's document details are sent |
| Deadline | Immediately, and at most 24 hours from the booking or the start of the stay | Within 24 hours of arrival, sooner for stays of a day or less; only today or yesterday is accepted as the arrival date |
| Payment details | Payment type, means of payment, holder, expiry and date, taken from the PMS rather than asked of the guest | Not part of the record |
| Interface | Electronic submission, which the decree requires; the build uses the interface available to the property, or a supervised browser step where there is none | A SOAP web service: credentials and a WSKEY give a temporary token, Test checks records without sending, Send accepts only valid records, Ricevuta returns the day's receipt |
One stay, from booking to receipt
Only one step uses a model, and only for documents or fields that plain OCR cannot read. Everything that decides what reaches the police, and when, is ordinary code with a person behind it.
01 Trigger · PMS API
A booking is confirmed in the PMS
The PMS reports new and changed bookings by webhook where it offers them, otherwise through a frequent poll. For the Spanish properties the booking itself is reportable, so its data is queued for SES.HOSPEDAJES straight away.
02 System · WhatsApp Cloud API, Gmail API
Send the pre-arrival link
A few days before arrival, the lead guest receives a link by WhatsApp template or email, in the language of the booking, with one form per guest and the guest count taken from the reservation.
03 Plain code
Read the machine-readable zone
The guest photographs the ID page. OCR reads the MRZ, and code verifies its check digits as defined in ICAO Doc 9303, along with the expiry date and document type. A failed check digit means a misread or the wrong page, and the guest is asked for a new photo.
04 AI model · Structured output
Read what the MRZ leaves out
Some documents have no machine-readable zone, and some required fields sit outside it. A vision model reads those from the photo into a strict schema, and the guest confirms every value on screen. Addresses and phone numbers are typed by the guest, never inferred.
05 Plain code
Validate against the country's rules
Code maps countries, municipalities and document types to the official code tables, links children to an adult, refuses a reservation whose records do not match its guest count, and matches names to the booking while allowing for transliteration. Italian batches also go through Alloggiati Web's Test method, which checks records without sending them.
06 Decision
Ready to report?
Rules decide, per guest and per country.
- All records valid, and the stay has started with check-in recorded in the PMS then report now
- A guest has not completed the form by the day of arrival then one reminder, then the desk collects the data at arrival
- A record fails validation, or the name on the document does not match the booking then the front desk queue, with the reason
- The police system times out or is down then retry with the same records, and alert the desk as the deadline nears
07 System · SES.HOSPEDAJES, Alloggiati Web service
Report and file the result
Each record is sent under a key built from guest and stay, so a retry after a timeout cannot report the same person twice. Alloggiati Web's Send accepts only the valid records in a batch, so the result for every record is stored, and the day's receipt is fetched with the Ricevuta method. Every call and response goes into an append-only audit log.
08 Plain code
Put the tourist tax on the folio
Each city's rules are data: rate per person and night, a cap on nights, exemptions such as children. Code calculates the amount per guest, posts it to the PMS folio before arrival, and prepares a summary per city for the returns finance files.
09 Person
The desk works the exceptions
Guests who declined the form, unreadable documents, rejected records and arrivals close to the deadline appear in one queue with the guest's thread. Staff check identity against the physical document where the property requires it, and correct rejected records through each system's own procedure. The pattern is covered in human-in-the-loop AI.
A family of four arrives in Bologna
The lead guest filled in the form on Wednesday. This is what the build did with it, ending with the report on Friday night.
Pre-arrival form and Alloggiati Web, Friday 11 September
- Booking B-44102: two adults and two children, three nights, a small hotel in Bologna. The form was completed on Wednesday for all four guests.
- read_mrz(guest: 1, image: "passport.jpg")TD3 passport / issuing state DEU / MUELLER<<ANNA<MARIA / born 1984-03-12 / F / expires 2031-06-30 / all check digits valid
- read_mrz(guest: 2, image: "id-card.jpg")TD1 ID card / issuing state DEU / MUELLER<<JONAS / born 1982-11-02 / M / all check digits valid
- match_booking(booking: "B-44102", adults: 2)booking name 'Anna Muller': match, the MRZ writes the umlaut as UE / 2 of 2 adults present
- check_minors(guests: [3, 4])ages 9 and 6 / linked to guest 1 as family members / document fields not required for family members
- build_records(country: "IT", booking: "B-44102")4 records / guest 1 as head of family, guests 2 to 4 as family members / state and document codes from the police tables / 3 nights
- alloggiati.Test(records: 4)4 of 4 valid
- The records then waited. Alloggiati Web accepts only today or yesterday as the arrival date, so nothing is sent until the guests have actually arrived.
- on_checkin(booking: "B-44102", at: "22:05")check-in recorded by the night porter in Mews / stay started / report queued
- alloggiati.Send(records: 4, key: "B-44102-2026-09-11")4 of 4 accepted / result stored per record / audit log entry written
- delete_images(booking: "B-44102")4 document photos deleted / confirmed data kept for the report
Registration assistant · WhatsApp
Welcome to Bologna, Anna. All four of you are registered for your stay, and the city tourist tax for the two adults is already on your bill. Reply here if you need anything from the desk.
- On Saturday morning the receipt for Friday's reports was fetched with the Ricevuta method and attached to the booking.
What goes wrong between the booking and the police receipt
Registration looks like data entry. These are the cases that make it a compliance process.
A guest will not share their data online
The link is a convenience; the duty is not. The legal basis for this data is the country's reporting law rather than consent, so the form explains why each field is needed instead of asking for a consent the guest could refuse. Anyone who declines gives the same data at the desk, on a screen with the same validation. A guest who refuses entirely is a decision for the property under its country's law, never something the software settles.
The same guest reported twice
Retries after a timeout reuse the same key per guest and stay, and the build checks its own log, and for Italy the per-record results, before sending anything again. Correcting a record that was already accepted goes through each system's own procedure, handled by a person.
The police system is down on a busy night
Reports queue and retry with backoff. When the deadline is a few hours away and the system is still unavailable, the desk gets an alert with the records ready for a manual upload, and the outage is logged as the reason for any delay.
Passport photos that outlive their purpose
Neither system asks for an image of the document, only its data. The build deletes each photo once the guest has confirmed the extracted fields, keeps the Spanish records for the three years the decree sets, keeps the Italian receipts as proof, and hosts everything in the EU. More on this in GDPR-compliant AI development.
A listing that shows the wrong registration number
The EU Short-Term Rental Regulation expects listings to carry the unit's registration number where a registration scheme applies. The build keeps each unit's number in the property record and flags any listing that shows a different one, which tends to happen after a unit is re-licensed or renumbered.
Who handles what at check-in
The AI model
Read documents without an MRZ, and fields outside it
Layouts vary by country and document type, and the guest confirms every value.
Answer guests' questions about the form
In the guest's language, from a fixed set of facts about what is collected and why, introducing itself as automated as Article 50 of the EU AI Act requires.
Plain code
Read the MRZ and verify its check digits
OCR plus arithmetic: a wrong digit fails loudly instead of slipping through.
Map to code tables and validate each record
The official tables are the authority, not the model.
Report, retry, store receipts and calculate the tourist tax
Deterministic keys make every retry safe, and city tax rules are data.
A person
Check a guest against the physical document
A person can see whether the face matches the photo; the build does no biometric matching.
Handle refusals, rejections and corrections
Each involves the law, and usually a guest standing at the desk.
Is a check-in app like Chekin enough for your properties?
For many properties it is. Chekin sends guest reports to the local authorities automatically, calculates the tourist tax during online check-in, offers identity verification and integrates with dozens of PMS, and other guest registration tools and PMS modules do similar work country by country. A single-country operator on a supported PMS should buy one and put the effort into the guest experience.
A custom workflow earns its place for groups like the one above: properties in two or more countries on two or more PMS, house rules the tools do not model (when the desk must see a document, how groups are handled, who reviews a rejected record), or a finance team that wants tourist tax returns per city in its own format.
Often the best answer is a hybrid: a check-in tool where it fits, and a thin custom layer that reconciles every property's reports and receipts into one audit view. The document reading follows the approach in AI document extraction, guests' questions reuse the setup from multilingual customer support, and more hotel builds sit under hospitality.
How you would know it is working
A blueprint has no results to report, so here is what I would measure from the first week instead, on your own data.
- Guests registered before arrival
- Share of guests with a complete, validated record before check-in, per property and booking channel.
- Reports inside the legal deadline
- Per country, with the cause of every late one: the guest, a validation failure or a system outage.
- Rejected records
- Records the police systems refused, by error type. Each type becomes a new validation rule.
- Desk minutes per arrival
- Time spent on registration per guest, sampled before and after, with night arrivals counted separately.
- Tourist tax reconciliation
- Difference between the tax calculated per stay and the amount declared per city each period.
What a build like this costs
This is built as AI Workflow Automation, which runs $3.5K - $60K overall. A build like this one usually lands in the multi-step workflow tier: $15K - $30K, 3-5 weeks. The first working version runs on your real data well before the end of that window.
What it costs to run
Most guests cost almost nothing to process, because a clean MRZ is read by OCR without any model. Documents that need the vision model cost a few cents at most. WhatsApp templates for the pre-arrival link are billed per message by Meta, and hosting is a small EU server with encrypted storage.
What moves the price
- How many countries and reporting systems, each with its own rules, code tables and interface
- How many PMS and channel managers the group runs
- Tourist tax complexity: cities, property categories, exemptions and return formats
- Whether arrival identity checks, door access codes or regional statistics returns are in scope
Who this is for
- Short-term rental operators and small hotel groups with properties in Spain and Italy
- Groups running more than one PMS after an acquisition, with registration done differently in each
- Apartment operators whose guests arrive after the office has closed
- Operators preparing for an inspection who need every report and receipt in one place
Questions people ask about this
Can SES.HOSPEDAJES reporting be automated?
Yes, as far as the law allows. The build collects each guest's data before arrival, validates it and reports it electronically, which Royal Decree 933/2021 requires anyway, within 24 hours of the booking or the start of the stay. Guests who skip the link are registered at the desk on the same validated screen, and the property remains responsible for what is sent.
How do I automate Alloggiati Web submissions?
Through its web service. Alloggiati Web offers a SOAP interface for property software: credentials and a WSKEY give a temporary token, a Test call checks records without sending them, Send reports and accepts only valid records, and the receipt for a day's reports can be downloaded. The build uses those calls and reports within 24 hours of arrival.
Can AI read passports and ID cards at hotel check-in?
Mostly this is not AI. The machine-readable zone on passports and most ID cards is read by OCR and verified with the check digits defined in ICAO Doc 9303, which catches misreads. A vision model helps only with documents or fields outside that zone, and the guest confirms every value on screen before anything is reported.
What does GDPR mean for collecting guest ID data online?
Collect what the reporting law requires, keep it only as long as that law says, and delete the rest. The form asks Spanish and Italian guests for different fields, document photos are deleted once the data is confirmed, Spanish records are kept for the three years Royal Decree 933/2021 sets, and everything is hosted in the EU. Legal responsibility stays with the property.
What does a guest registration workflow cost?
It usually lands in the middle range of workflow automation projects. The price moves with the number of countries and reporting systems, the PMS platforms, the cities with tourist tax rules, and extras such as arrival identity checks. Running costs are small: document reading for the guests who need it, WhatsApp template fees and a small EU server.
Sources