Part of Hostmade.de — informational platform built by hosts for hosts Browse the toolkit →

Smoobu → Google Sheets:
Automate Your STR Reservation Management

Every new booking kicks off the same busywork: message the cleaner, update the tax list, fix your own overview — and hope no cancellation slips through the cracks. This free Apps Script does all of it for you. It connects to the Smoobu API and keeps three spreadsheets current — your cleaner's schedule, your accountant's tax export, and your own master list. Set it up once and it runs every hour in the background, whether you're thinking about it or not.

Three outputs, zero manual work

The script writes to three separate Google Sheets simultaneously. Each stakeholder gets only the columns they care about — nothing more, nothing less.

🧹

Your cleaner

A sheet your cleaner checks on their phone before heading over. New booking? Already there. Cancellation? Already gone — nobody drives out to clean for a guest who cancelled last week.

  • Arrival & departure dates
  • Guest name & count (adults, children)
  • 🐕 Dog count — auto-detected from guest notes
  • 👶 Infant count — detected even if miscategorised
  • Cancellations removed in real time
  • Guest notes & assistant instructions
💶

Your accountant

Skip the January scramble. Only completed stays, counted from your tax year start date, with fees already broken out — send your accountant the link and you're done.

  • Booking channel (Airbnb, Booking.com, direct)
  • Total guest payment
  • Host fee (platform commission) separated
  • Cleaning fee separated
  • Net payout calculated automatically
  • Only past stays — no future bookings
📊

You (the host)

Every booking, every detail, in one place — the guest's phone number, the prepayment that hasn't arrived, the note about a late check-in. It's also a full backup of your reservation data, independent of Smoobu.

  • All bookings across all properties
  • Guest phone number & contact details
  • Price paid vs. price billed
  • Payment status (prepayment tracker)
  • Guest notes & special requests
  • Deep-link to Smoobu guest app per booking
You don't have to build these sheets yourself. The template comes with headers, formulas, and pet-alert formatting already in place — just point the script at it.
Request the template →

How it all connects

One script run does everything: it fetches all bookings from Smoobu, applies smart detection logic, then writes to all three sheets in a single pass.

☁️ Smoobu API all reservations + price elements ⚡ Apps Script fetch + paginate deduplicates IDs 🧠 Smart Check detect pets/infants separate fees 🧹 Cleaner Sheet schedule + pets no cancellations 💶 Tax Export fees separated past stays only 📊 Master List everything full backup

1 Prerequisites

Nothing here costs extra and nothing needs installing. If you run Smoobu and use Gmail, you already have almost everything — the only real prep is creating three blank spreadsheets.

What you needWhere to get it
Smoobu account with API access enabledSettings → External Integrations → API → Generate API key
Google account with Drive & SheetsYou already have this if you use Gmail
3 Google Sheets — Master, Cleaner, TaxCreate blank spreadsheets; copy their IDs from the URL
Edit access to all three sheetsThe script runs as your Google account, so it needs owner or editor access
Smoobu API key location
Log into Smoobu → click your name (top right) → Settings → External Integrations → API. The key is a long alphanumeric string. Keep it private — it grants read access to all your reservations.

2 Setup steps

  1. Create three blank Google Sheets: one for yourself (Master), one to share with your cleaner, one to share with your accountant
  2. Copy each sheet's ID from the URL bar — it's the long code between /d/ and /edit
  3. Open your Master SheetExtensions → Apps Script
  4. Delete the placeholder code, paste the full script (see the "Get the script" section below), and save
  5. Reload the spreadsheet — a Smoobu Sync menu appears in the toolbar
  6. Fill in the CONFIG block at the top with your API key and sheet IDs
  7. Click Smoobu Sync → Update All Bookings for the first run
  8. Grant permissions when Google prompts you (the script needs Sheets, Drive, and URL fetch access)
Share with your cleaner and accountant
After the first run, share the Cleaner Sheet and Tax Sheet with their Google accounts (view-only is enough). They'll always see the current data — no sending PDFs, no manual updates.

3 Configure

Fill in the four values at the top of the script. Everything else is automatic.

CONFIG — top of the script
const CONFIG = {
  // 1. Your Smoobu API key (Settings → External Integrations → API)
  API_KEY: 'YOUR_SMOOBU_API_KEY_HERE',

  // 2. Google Sheet ID for your cleaner's schedule
  CLEANING_SHEET_ID: 'YOUR_CLEANING_SPREADSHEET_ID',

  // 3. Google Sheet ID for your accountant's tax report
  TAX_DESTINATION_ID: 'YOUR_TAX_SPREADSHEET_ID',

  // 4. First day to include in the tax export (Year, Month-1, Day)
  //    new Date(2025, 11, 31) = 31 December 2025
  TAX_START_DATE: new Date(2025, 11, 31)
};
Month is 0-indexed in JavaScript
January = 0, February = 1, … December = 11. So new Date(2025, 11, 31) is December 31st, 2025 — the end of the previous tax year.

4 Master list — your full view

The Master List is written to a tab called Reservations in your main spreadsheet. It contains every booking (confirmed and cancelled) with all available data.

Sample output — your data will look similar
#ArrivalDepartureGuestPortalAdultsDogsPricePaidStatus
12904515.06.202520.06.2025Smith, J.Airbnb2🐕 1€450.00€450.00confirmed
12910822.06.202525.06.2025Müller, A.Booking.com2€310.00€155.00confirmed
12923401.07.202508.07.2025Johnson, C.Direct4€720.00€720.00confirmed
12930110.07.202514.07.2025Rossi, M.Airbnb2🐕 2€380.00€380.00confirmed

Full column list: Position, Arrival, Departure, Guest Name, Portal, Reference ID, Guest App URL, Created Date, Phone, Adults, Children, Infants, Dogs, Guest Notes, Assistant Instructions, Price, Amount Paid, Prepayment Paid, Number of Nights, Status.


5 Cleaner sheet — schedule & pet alerts

Written to the Data tab in your separate Cleaner spreadsheet. Cancelled bookings are excluded automatically — your cleaner never sees a job that was cancelled.

What makes this useful for cleaners
A guest who writes "we're bringing our two dogs" in the booking message — but never ticks the "pets" box in Airbnb — still gets flagged as 🐕 2. Your cleaner shows up with the right supplies and the right time budget, instead of discovering the dog from the hair on the sofa.
Sample output — your data will look similar
ArrivalDepartureGuestAdultsChildrenInfants🐕 DogsGuest Notes
15.06.202520.06.2025Smith, J.2001We're bringing our dog, very well-behaved!
22.06.202525.06.2025Müller, A.210
01.07.202508.07.2025Johnson, C.400We're celebrating an anniversary
10.07.202514.07.2025Rossi, M.2002Bringing 2 dogs, they sleep in the kitchen

Notice what's missing: money. Same schedule, same notes as your master list, but none of the financial columns. Your cleaner sees who's arriving and what to prepare for — what guests paid stays between you and your accountant.


6 Tax export — accountant-ready

Written to two places: a Smoobu Tax export tab in your Master Sheet (all bookings), and your separate Tax Sheet (filtered to completed stays past your TAX_START_DATE). The latter is what you share with your accountant.

The "reporting date" is Day 2 of the stay
German short-term rental income is typically recognised when the guest has checked in — not the booking date and not the departure date. The script uses day 2 of each stay as the reporting date in column A.
Sample output — your data will look similar
DateChannelStartNightsGuestAmountHost FeeCleaningPaid Out
16.06.2025Airbnb15.06.20255Smith, J.€450.00€45.00€60.00=M-O
23.06.2025Booking.com22.06.20253Müller, A.€310.00€46.50€60.00=M-O
02.07.2025Direct01.07.20257Johnson, C.€720.00€0€80.00=M-O
11.07.2025Airbnb10.07.20254Rossi, M.€380.00€38.00€60.00=M-O

The "Paid Out" column is a live formula, not a pasted number: =M-O in the actual sheet, where column M is the total amount and column O is the host fee. Correct a fee figure once and the payout fixes itself. The cleaning fee keeps its own column, so your accountant can treat it however your setup requires.


7 Smart pet & infant detection

Guests frequently mention animals in the free-text notes field without ticking the "pets" checkbox in Airbnb or Booking.com. This is the single most common cause of "surprise" for cleaners.

The script scans each booking's notice field (guest-visible notes) with two detection layers:

Layer 1 — Structured field

Smoobu stores an infants field. This is the authoritative count if the guest filled it in correctly.

Layer 2 — Text regex on guest notes

Smart detection — dog regex
// Counts 2 dogs if the guest mentions "two dogs" / "2 Hunde" / etc.
if (noticeLower.match(/\b(2|two|zwei|deux)\s+(dogs|hunde|chiens|pets)\b/)) {
  dogCount = 2;
} else if (noticeLower.match(/(dog|hund|pet|chien|animal)/)) {
  dogCount = 1; // single mention = 1 dog assumed
}
Smart detection — infant regex
// Checks Smoobu's structured field first; falls back to text scan
if (infantCount === 0) {
  const match = noticeText.match(/Number of infants:\s*(\d+)/i);
  if (match) infantCount = parseInt(match[1]);
}

Layer 2 also checks the price elements API call (made for each booking to get fee data): if there's a "pet fee" line item, a dog is flagged even without a text mention.

Extend the regex to your language
If your guests mostly write in German, Spanish, or Italian, add their words to the pattern: /(dog|hund|chien|perro|cane|animal|huisdier)/. The regex works on any word that appears anywhere in the notice field.

8 Fee breakdown

Smoobu's reservation list endpoint gives you a single commission-included value. To get the cleaning fee, the script makes a second API call per booking to the price elements endpoint:

Fee fetcher — per booking
GET https://login.smoobu.com/api/reservations/{id}/price-elements

// Returns an array like:
[
  { type: "cleaningFee", name: "Cleaning Fee", amount: 60 },
  { type: "commission",  name: "Airbnb Host Fee", amount: 45 },
  { type: "extraPerson", name: "Additional Guest", amount: 20 }
]

The script finds the cleaning fee by matching type === "cleaningFee" or a name containing "cleaning". The host fee is taken from the commission-included field first (already on the main record), falling back to the price elements if it's missing.

Direct bookings won't have a host fee
Bookings created directly in Smoobu (not via Airbnb or Booking.com) have no platform commission. The host fee will be 0 — that's correct. The cleaning fee is still fetched from the price elements if you've configured one in Smoobu.

9 Tax date filter

The accountant's external sheet only receives bookings where the reporting date (day 2 of the stay) is after TAX_START_DATE and the arrival is in the past. This filters out three things automatically:

Excluded from the accountant sheetWhy
Future bookingsRevenue not yet earned — arrival date is still in the future
Stays before your tax year startAlready declared in the previous year's return
Cancelled bookingsFiltered out upstream — never reach the tax export
Tax filter condition
const sendToAccountant =
  taxDateObj &&
  arrivalDateObj &&
  (taxDateObj > CONFIG.TAX_START_DATE) &&  // after tax year start
  (arrivalDateObj <= today);               // stay has started

Your master sheet (internal) always contains all bookings regardless of this filter — the filter only applies to what goes into the external Tax Sheet.


10 Hourly trigger

Set this up once and the script runs automatically in the background — you never need to click "Sync" again.

  1. In your Master Sheet → Extensions → Apps Script
  2. Click the clock icon on the left sidebar (Triggers)
  3. + Add Trigger
  4. Function: syncSmoobuToSheet
  5. Event source: Time-driven → Hours timer → Every hour
  6. Save — Google prompts for permissions on first run
Hourly is the right cadence
A last-minute booking for tonight shows up in your cleaner's sheet within the hour — early enough to reshuffle the afternoon. A same-day cancellation disappears just as fast, before anyone drives over for nothing. If you get a lot of short-notice bookings, set the trigger to every 30 minutes instead.

To check the run history and see any errors: in Apps Script → left sidebar → Executions. Each run is logged with its duration and any error messages.


Get the script & template

The full script is a GitHub Gist — free, open source, yours to copy and adapt. If you'd rather not format three spreadsheets from scratch, the ready-made template (headers, formulas, pet-alert highlighting) is one request away through Hostmade.de — informational platform built by hosts for hosts.

GitHub avatar
smoobu-sheets-sync.gs waldo-van-der-code · GitHub Gist · free, open source

Get the template spreadsheet

All three tabs already built — headers, formulas, pet-alert highlighting — so your first sync lands in a sheet that looks right from row one. One request via Hostmade.de — informational platform built by hosts for hosts — and it's yours.

Request the template →

Need custom columns or properties?

A Telegram ping the moment a booking lands. An extra column your cleaner keeps asking for. More properties in the same sheets. Tell me what your setup needs and I'll wire it up.

Get in touch →