Custom Variables
Custom variables let you insert property-specific details — including access codes — into messages and Knowledge Base articles, with automatic security gating so codes are never revealed before your configured check-in window or to unverified guests.
Custom variables let you write a message once and have it automatically fill in the right details for each property and each guest. Instead of maintaining 40 versions of your check-in message, you write one — with placeholders — and Vanio fills in the parking spot, the WiFi password, and the pet fee for each booking.
What a variable looks like
A variable is a short name wrapped in curly braces, like {parking_instructions} or {pet_fee}. When a message goes out, Vanio replaces it with the actual value for that listing or reservation.
You can use variables anywhere you write text that gets sent to a guest:
- Message templates and automated replies
- Workflow actions
- AI Skill steps
- Knowledge base articles
The four scopes
Variables can be defined at four different levels. Higher levels apply to everything below them, and more specific levels override more general ones.
- Global — applies to your entire account. Good for things that are always the same, like your company name or support phone number.
- Group — applies to every listing in a listing group. Good for shared info across a building or a region, like "Parking is on level B2" for all units in a single building.
- Listing — applies to one specific property. Good for unique details like the WiFi password, the door code, or the trash collection day.
- Reservation — applies only to a single booking. Good for one-off details like a special arrival time or a custom welcome note.
How overrides work
When Vanio needs to fill in a variable, it looks from the most specific scope to the most general. If you've set {pet_fee} at the global level to $50, but your beachfront listing has it set to $100, the beachfront guest sees $100 and everyone else sees $50. You don't have to think about the hierarchy — it just picks the right value.
Creating a variable
- Go to Settings → Variables.
- Click New variable and choose a scope (global, group, listing, or reservation).
- Give it a short name like
parking_instructions. Use lowercase and underscores — no spaces. - Enter the value. This can be a few words, a full paragraph, a price, or a link.
- Save. The variable is immediately available to use in any template or automation.
To use it, type {parking_instructions} anywhere in a message. When the message is sent, Vanio swaps in the right text for that listing.
Keeping access codes secure
If you store door codes, lock box combinations, or building access codes in a custom variable, Vanio treats those variables the same way it treats smart-lock codes — they won't appear in the guest portal until your configured reveal window before check-in.
How Vanio decides whether a variable contains an access code:
- Category is the primary signal. Variables assigned to the Codes category are always withheld until reveal time, regardless of their content or any other settings. This is the most reliable way to protect a code.
- Sensitivity flag. Variables you've marked as sensitive are also withheld.
- Content detection. As a safety net, Vanio scans variable values for patterns that look like entry codes, even if the variable isn't in the Codes category.
Note that WiFi passwords are not treated as access codes — guests can see the WiFi details as soon as they access the portal.
What guests see before reveal time:
Instead of the actual code, guests see a placeholder message:
🔒 Available closer to check-in
This appears wherever the variable is referenced — for example, inside a check-in instructions article. Once the reveal window is reached, the placeholder is automatically replaced with the real code the next time the guest views the page.
To make sure your codes are protected:
- Go to Settings → Variables.
- Open the variable that holds your access code.
- Set its Category to Codes.
- Save.
That's all you need to do. Vanio takes care of the rest, using the same reveal time you've already configured for your lock codes.
[Screenshot: Variable editor showing the Category field set to "Codes"]
How variables in Knowledge Base articles are resolved
When you reference a custom variable inside a Knowledge Base article — for example, writing "Your door code is {{custom.fixedCode}}" in your check-in instructions — Vanio now resolves that placeholder before the AI ever reads the article. This means the AI always sees the final, correct value (or a safe placeholder if the value isn't available yet), rather than the raw {{custom.fixedCode}} text.
This matters most for access codes. Previously, if a KB article contained an unresolved code placeholder, the AI had no real value to work with. This is now fixed: the same verification and reveal-time gate that protects your Access Codes section applies equally to variables inside KB articles.
What the AI sees, depending on the situation:
| Situation | What appears in the article |
|---|---|
| Guest is verified and the reveal window is open | The real value (e.g. the actual door code) |
| Guest has not completed identity verification | (available at check-in — see your guest portal) |
| Reveal window hasn't opened yet | (available at check-in — see your guest portal) followed by when it becomes available |
| Variable exists but has no value set | (see your Access Codes / guest portal) |
| Placeholder uses an unrecognised format | (see your Access Codes / guest portal) |
The AI will never see a raw {{...}} placeholder, will never invent a value to fill one in, and will never read out an example code. If a code isn't available, it tells the guest where to find it or routes them to their portal.
Note for operators writing KB articles: You don't need to change how you write your articles. Keep using
{{custom.fixedCode}},{{custom.building_code}}, and so on exactly as before. Vanio handles the resolution automatically, with the same security rules applied everywhere.
Examples that earn their keep
{pet_fee}— Set globally at $75, overridden to $150 on luxury listings. Used in your booking confirmation and your house rules.{parking_instructions}— Set per group so every unit in the same building shares one accurate description. No more outdated parking notes copy-pasted across listings.{neighborhood_guide_url}— A link to a Google Doc or web page. Set per listing so each property points to its own guide.{early_checkin_fee}— Used by your early check-in AI Skill to quote the right price automatically.{cleaner_name}— Set per listing so internal task notifications include the right contact.{lockbox_code}— Set per listing in the Codes category. Guests see a placeholder until your configured reveal window, then the real code appears automatically.
Common questions
Can I see all my variables in one place? Yes — the Variables page shows every variable across every scope, with filters for scope and listing.
What happens if a variable isn't defined? The placeholder is left out of the message and a small warning appears in the logs so you know to fill it in.
Can the AI use variables on its own? Yes. When the AI writes a reply, it pulls from your variables automatically — so it always quotes the right price and the right details.
Can I use variables inside other variables? Yes, one level deep. For example, your welcome message variable can include {wifi_password}.
I store my door code in a custom variable. Will it be hidden from guests until check-in? Yes — as long as the variable is assigned to the Codes category, Vanio will withhold it from the guest portal until your configured reveal window, exactly like a smart-lock code. This protection now extends to Knowledge Base articles too: if your check-in instructions reference {{custom.fixedCode}}, the code won't appear in that article until the same reveal window opens. If you're not sure which category a variable is in, go to Settings → Variables and check the Category field.
My guest says they can see a placeholder instead of the code. Is something wrong? No — that means the reveal window hasn't opened yet, or the guest hasn't completed identity verification in the guest portal. The code will appear automatically once the configured time before check-in is reached and verification is complete. If check-in has already passed and the placeholder is still showing, confirm that your reveal time is set correctly under your lock settings and that the guest has completed portal verification.
I use {{custom.building_code}} in a KB article. Will the AI read that code out on a voice call? Only if the guest is verified and the reveal window is open — in which case the AI reads the real code from your variable. If either condition isn't met, the AI will not read a code at all. It will let the guest know the code isn't available yet and direct them to their portal.
Automations & Payments
This guide is also relevant for: