Skip to content

Book problem interviews from my waitlist

Status planned

Say "book 15 problem interviews from my waitlist" and get an interview link sent to everyone waiting, with each call on your calendar.

Talk to the people who signed up before you build more. Its status is planned: your agent tells you so and runs nothing yet.

Needs Start a waitlist · Give me a booking link

What you get

  • 1interview link with your one questionMeeting Type
  • 1invitation to every Lead on the waitlistMessage
  • 1520-minute calls, each with a transcriptMeeting

Your agent does

MeetingType.create then MeetingType.publish then Message.broadcast
You, to your agent

Book 15 problem interviews from my waitlist.

Get me calls with people on the waitlist.

Ask the waitlist for 20-minute interviews.

# Look up the Availability: Availability.list
AVAILABILITY=$(curl "https://api.sb/leaseline.app/availabilities?limit=1" \
  -H "Authorization: Bearer $STARTUP_BUILDER_API_KEY" | jq -r '.availabilities[0]["$id"] | split("/") | last')

# 1. MeetingType.create
MEETING_TYPE=$(curl -X POST https://api.sb/leaseline.app/meeting-types \
  -H "Authorization: Bearer $STARTUP_BUILDER_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"name":"Problem interview","duration":20,"medium":"video","availability":"'"$AVAILABILITY"'","questions":["How do you track lease renewals today?"]}' | jq -r '.meetingType["$id"] | split("/") | last')

# 2. MeetingType.publish
curl -X POST https://api.sb/leaseline.app/meeting-types/$MEETING_TYPE/publish \
  -H "Authorization: Bearer $STARTUP_BUILDER_API_KEY"

# Look up the Message: Message.list
MESSAGE=$(curl "https://api.sb/leaseline.app/messages?limit=1" \
  -H "Authorization: Bearer $STARTUP_BUILDER_API_KEY" | jq -r '.messages[0]["$id"] | split("/") | last')

# Look up the Audience: Audience.list
AUDIENCE=$(curl "https://api.sb/leaseline.app/audiences?limit=1" \
  -H "Authorization: Bearer $STARTUP_BUILDER_API_KEY" | jq -r '.audiences[0]["$id"] | split("/") | last')

# 3. Message.broadcast
IDEMPOTENCY_KEY=$(uuidgen)
curl -X POST https://api.sb/leaseline.app/messages/$MESSAGE/broadcast \
  -H "Authorization: Bearer $STARTUP_BUILDER_API_KEY" \
  -H "Idempotency-Key: $IDEMPOTENCY_KEY" \
  -H "Content-Type: application/json" \
  -d '{"audience":"'"$AUDIENCE"'"}'
import { $ } from 'startup-builder'

const [availability] = await $.Availability.list({ limit: 1 })
const meetingType = await $.MeetingType.create({ name: 'Problem interview', duration: 20, medium: 'video', availability: availability.$id, questions: ['How do you track lease renewals today?'] })
await $.MeetingType.publish({ meetingType: meetingType.$id })
const [message] = await $.Message.list({ limit: 1 })
const [audience] = await $.Audience.list({ limit: 1 })
await $.Message.broadcast({ message: message.$id, audience: audience.$id })
AVAILABILITY=$(npx startup-builder do Availability.list --json '{"limit":1}' | jq -r '.availabilities[0]["$id"] | split("/") | last')
MEETING_TYPE=$(npx startup-builder do MeetingType.create --json '{"name":"Problem interview","duration":20,"medium":"video","availability":"'"$AVAILABILITY"'","questions":["How do you track lease renewals today?"]}' | jq -r '.meetingType["$id"] | split("/") | last')
npx startup-builder do MeetingType.publish --json '{"meetingType":"'"$MEETING_TYPE"'"}'
MESSAGE=$(npx startup-builder do Message.list --json '{"limit":1}' | jq -r '.messages[0]["$id"] | split("/") | last')
AUDIENCE=$(npx startup-builder do Audience.list --json '{"limit":1}' | jq -r '.audiences[0]["$id"] | split("/") | last')
IDEMPOTENCY_KEY=$(uuidgen)
npx startup-builder do Message.broadcast --json '{"message":"'"$MESSAGE"'","audience":"'"$AUDIENCE"'"}' --idempotency-key "$IDEMPOTENCY_KEY"
{
  "name": "do",
  "arguments": {
    "code": "const [availability] = await $.Availability.list({ limit: 1 })\nconst meetingType = await $.MeetingType.create({ name: 'Problem interview', duration: 20, medium: 'video', availability: availability.$id, questions: ['How do you track lease renewals today?'] })\nawait $.MeetingType.publish({ meetingType: meetingType.$id })\nconst [message] = await $.Message.list({ limit: 1 })\nconst [audience] = await $.Audience.list({ limit: 1 })\nreturn await $.Message.broadcast({ message: message.$id, audience: audience.$id })"
  }
}

Change it

  • Stop at 15 bookings.
  • Only invite managers with more than 50 units.
  • Send me each transcript the hour after the call.

Under the hood

Systems
Scheduling, Waitlists, Discovery
Nouns
Meeting Type, Meeting, Interview, Lead
Events
MeetingType.published, Meeting.booked

The invitation goes out by Message.broadcast to the Leads on the Waitlist. Each held call keeps its transcript, which Discovery grades as Evidence for the problem slot of the Founding Hypothesis.