A lead that lands with someone who is off shift waits. This app assigns new records to whoever is actually working: it reads each agent’s schedule, picks an available owner, and shows the team who is on duty right now.
I built it as part of Estateflow, and it installs into a client’s HubSpot portal on its own — the team works with it inside the CRM they already use, not in another tab.
Assigning by who is on shift
Each agent has shifts, in their own timezone, with effective date ranges and exceptions for the days that break the pattern. The app refuses to save a shift that overlaps one the agent already has, because an overlap is usually a typo rather than an intention.
When a lead arrives, the candidates are the agents on shift at that moment, and the app takes turns among them rather than always handing work to the first name on the list.
Who is working, and when.
Pools, rules, and leads that already have an owner
Not every lead should go to the same group. Routing pools are matched by rules on the record’s own properties, and a pool can belong to a specific development, so enquiries about one project reach the people who sell it.
A record that already has an owner is the case worth getting right. The policy for those is explicit and configurable, so a returning customer is not quietly taken away from the person who has been working with them.
Inbound calls fit the same model: phone numbers map to routing groups, so a call and a form fill land with the same logic.
Where it runs
The interface is a HubSpot UI extension, so it lives inside the portal. Routing is triggered by webhooks when a contact is created or a deal changes stage, and it is also available as a workflow action for teams that would rather decide when it fires.
Every portal connects through its own OAuth install, and requests from the extension are signed before the Estateflow API will act on them.