Lead response desk with a running clock on every new lead

By General Input

Your sales floor works one queue of brand new leads, oldest first, with a response clock on every card and a drafted opening text ready to send.

Integrations

  • LoopMessage
  • HubSpot

Type

App

Categories

  • Sales

Build me a lead response desk my sales floor works out of, built around the fact that the first person to reply usually wins the deal. It is an app with two tabs: a live queue of brand new leads that reps work one at a time, and a leaderboard a sales manager watches week over week. There is no schedule and no trigger. People open this app and work it.

The main tab is the queue. Load it from HubSpot Search Contacts, filtered to contacts created in the last 48 hours whose lifecycle stage is still early (lead, subscriber, or marketing qualified lead, and let me configure which stages count). Sort oldest first so the lead who has waited longest sits at the top. Each lead is a card showing the contact's HubSpot properties (name, phone, email, company, job title), the lead source recorded on the contact, any associated deal pulled with HubSpot Search Deals, and the assigned owner resolved to a real person's name through HubSpot List Owners rather than showing a raw owner id.

Every card carries a running response clock, and this is the primary visual element of the whole app. It counts from the moment the contact was created in HubSpot to the moment our first text actually goes out. While a lead is unanswered the clock ticks live on screen: neutral under five minutes, amber at five minutes, red at fifteen. Make the amber and fifteen minute thresholds configurable. Once a first touch has been sent, the clock freezes at the elapsed time and that frozen value is what the leaderboard reports.

A rep claims a lead before working it so two people never text the same person. Claiming stores the rep's identity and a timestamp in the app's own storage, and the claim is visible to everyone else on the board immediately, with the claimer's name on the card. A rep can release a claim if they picked up the wrong lead. Claims are shared state across all viewers, not per-user local state.

The action on each card is a "Draft first touch" button that kicks off a background agent embedded in the app. That agent reads the full HubSpot contact record with Get Contact, looks up the associated deal with HubSpot Search Deals, and pulls any prior conversation with that person using LoopMessage Get Message History for Contact so it knows whether this is genuinely a first contact or a returning lead. It then writes one short personalised opening text and puts the draft back on the card, where the rep edits it inline before sending.

Constrain that drafting agent hard, because a first message to someone who has never texted us has to clear LoopMessage's opt-in flow. Quoting the integration docs: "The initial opt-in message must contain no links, emails, phone numbers, currency amounts, attachments, or marketing copy or it will be rejected." So the opening message must be a short human introduction that invites a reply, with no links, no prices, no marketing language, and no attachments. Put this rule in the agent's instructions and also validate the text the rep is about to send, blocking the send with a clear explanation if the edited version reintroduces a link or a price.

Two rules to bake into the send path. First, always run LoopMessage Check Contact Status before any send, and refuse to send to anyone unsubscribed, showing the reason on the card. Second, let the rep pick which sender the text goes out from, populated by LoopMessage List Senders. The send itself uses LoopMessage Send Message, and because delivery is asynchronous the card shows live delivery state from LoopMessage Get Message Status rather than claiming success the moment the request returns.

Once a text is sent, do two things. Log what actually went out as a note on the HubSpot contact using Create Note, including the message text, who sent it, and the time to first touch, so the CRM timeline stays honest and a manager reading the record in HubSpot sees the same story the app shows. Then move the card into a "waiting on reply" column. Cards in that column poll LoopMessage Get Message History for Contact and surface the lead's inbound response inline when it arrives, so the rep sees the reply without leaving the desk.

The second tab is a simple leaderboard of median time to first touch, broken down by rep and by lead source, over a period I can choose such as this week, last week, or this month. Show the median rather than the average so one lead nobody touched does not distort the number, alongside the count of leads handled and how many breached the fifteen minute mark. This is the number a sales manager actually wants to watch week over week, so keep it readable at a glance rather than dense.

Keep the scope tight. This is a CRM sourced new lead queue ordered by a response clock where the job is first touch. It is deliberately not a general shared inbox and should not drift into thread browsing, bulk messaging, or managing conversations with existing customers.

Related prompts

Explore more prompts
Turn Mailjet email clicks into ranked HubSpot follow-upsiMessage campaign console with pre-flight checks and delivery boardA searchable RFP answer library your bid team drafts fromSee which target accounts just started advertising on LinkedInFront desk appointment confirmation board for the next 3 daysAccount health board that puts product usage next to your CRMLook up a customer's full chat history mid conversationLusha prospecting workbench with credit-safe revealsWhich companies your LinkedIn ads reach, matched to your CRMApprove Lusha enrichment field by field before HubSpot saves it