Skip to content

Automation

Purpose: The work the platform does on its own, on a schedule or in response to events. Around forty scheduled jobs run across the apps, plus the sync that fires when staff act. This is the map for "that happened without anyone pressing a button" and "the overnight job didn't run".

Primary users: Anyone diagnosing timing-related behaviour or an integration that seems to fire by itself.

Two kinds of automation

  1. Scheduled jobs: run on a clock (every few minutes to daily).
  2. Event-driven sync: fires immediately when a record changes, mostly to keep Qube, HubSpot and Rent Profile in step.

Gotchas worth knowing first

  • Some jobs only run in production. Several (onboarding, inventory reminders, "can be let" checks) are gated to the production environment, so they won't fire in UAT or locally.
  • Some are feature-flag gated. The inspection prompts only run when the tenancy-inspections flag is on.
  • Timing is deliberately staggered. For example the 07:00 inventory reminders, 07:05 inspection prompts and 07:10 check-out prompts are spaced so they don't read the same Inventory Hive data at once. If you move one, mind the others.
  • Many jobs ping a heartbeat URL and are monitored, so a silent failure is visible in monitoring.

Scheduled jobs by app

Portal (the busiest scheduler):

AreaJobs (roughly)
Qube syncCustomer and unit data hourly; tenancies every 15 min; lease end dates daily
Direct debitsDaily reminder dispatch (01:00)
Reservations / deal sheetsArchive expired reservations and stale deal sheets; overdue checks
ViewingsFetch from HubSpot; attendance and dormant-viewing emails
Inspections (prod, flagged)Mid-tenancy and check-out prompts (morning)
Inventory Hive (prod)Sync statuses; reminder emails (07:00)
Onboarding (prod)Auto-onboard residents to the app; invite follow-ups
RenewalsRenewal notifications and "entered Rent Review" emails (mid-morning)
Move-outComplete due move-outs; refresh smart-lock eligibility (shortly after midnight)
Rent Profile / HubSpotReconcile tenancy statuses; cache deals and property options
HousekeepingSearch indexing, cache warming, temp-file cleanup, token/log pruning

Everest: publish scheduled listings (every 15 min), refresh stale listings (evening), pull Rightmove stats, recompute dashboard tiles hourly, generate the dashboard alert notifications, decommission checks, and housekeeping.

Olympus Backend: Tableau operations, sync groups (6-hourly), refresh user Tableau IDs (weekly), rotate credentials (daily), and alert on Slack if the Tableau token is revoked.

Tenancy API: clean up expired document-download links (every 5 min).

Event-driven sync

Qube (the connectors)

When staff act in Portal, events fire that push data into Qube:

  • Approve a deal and the unit, deposit, monthly payments and tenancy documents are all synced to Qube.
  • Create or update a customer and the customer is synced.
  • Raise a charge or transaction and it's pushed to Qube (raising a transaction also creates a resident payment notification).

A single master switch can turn Qube writes off across the platform, and failures are logged rather than allowed to break the staff member's action. See the Qube sync playbook for the full picture.

HubSpot & Rent Profile

Reservation and deal-sheet activity transitions the matching HubSpot deal stage, and passing referencing or signing contracts syncs back into Qube and HubSpot. Rent Profile status changes reconcile onto the tenancy.

Cross-app system events

Some events cross between apps over the internal gateway. Two to know:

  • A new operator (company) being created seeds that operator's tenant database, including its Section 13 mail templates.
  • A resident submitting an end-of-tenancy notice notifies staff and, where flagged, the resident.

Where the detail lives

Schedules are defined in each app's routes/console.php; the Qube sync is in the connectors package and Portal's event bindings. The Notifications & Emails page covers what these jobs send.