OpenFrame Gen1 is Here

Updated: July 2026

We don't have a sales team. There's no marketing ops manager and no SDR running outbound. The lead funnel for our waitlist - signup, AI lead qualification, enrichment, access management - runs on Claude calls and a database we wrote ourselves.

Some numbers from where we are right now:

  • 2,090 waitlist signups
  • 585 access codes granted
  • 196 MSPs actively using OpenFrame in production

So roughly 28% of waitlist signups qualify, and 34% of access codes get used. Nobody on the team touches anything until we manually pick which cohorts get codes for the next batch.

What follows is how we wired it up.

Why HubSpot isn't the entry point

At a previous company, traffic tracking and form fills piped everything into HubSpot. Within months the contacts table had tens of thousands of rows, most of them spam or scrapers. Once a CRM gets to that state, deduping it is a six-month project nobody wants to own.

So at Flamingo we do this different. Every waitlist signup lands in our own Postgres table. Claude runs the AI lead qualification pass on it. If the row clears the threshold, it gets pushed to HubSpot. Otherwise it stays put.

Our AI lead qualification pipeline

  1. Signup writes to our database first. The waitlist form asks for email, business address, and phone. The phone field was added a few months in, after a chunk of our outreach kept landing in spam folders – having a number to call or text turned out to matter.

  1. Claude does the enrichment. A structured prompt with the lead's data goes to a Claude call. Web search runs against the company domain. The output is a small JSON object: company name, industry, rough headcount, MSP confidence score from 0 to 100, and the model's written reasoning for the score.

  2. HubSpot only sees qualified contacts. If the MSP confidence clears our threshold, we create the HubSpot contact and company objects with all of the enrichment attached, plus UTM params and custom events. Below the threshold, the row stays in our database with the rejection reason on it. No HubSpot record gets created.

  3. Access codes are tied to cohorts. Joining the waitlist doesn't give you a code. We reach out to the qualified ones over LinkedIn or email, ask if they actually want to deploy in production, and only then generate a code. Each code belongs to a cohort, so we can compare activation rates across batches.

  4. Daily usage telemetry comes back to HubSpot. Once an MSP installs OpenFrame, the tenant reports its device count back every 24 hours. That data drives three things: account health (tenants idle for more than 10 days get a warning email), Stripe billing readiness, and the metrics we share with investors.

What Claude does at the front door

The enrichment pass is where most of the work happens. Each signup gets a structured prompt with whatever fields the form captured. Claude runs web search against the domain and returns the JSON described above.

We store everything Claude returns, including the rationale and the model version. That means we can come back later, compare our AI lead scoring methodology against actual outcomes, and re-score the historical waitlist if the threshold changes. We've done this twice already.

The other piece is Clay. When a HubSpot contact gets created without a LinkedIn URL, a webhook hits Clay async to backfill it. That keeps the enrichment flow fast on the user-facing side while still getting us LinkedIn coverage for outreach later.

The whole synchronous loop - form submit to enriched DB record - runs in a few seconds.

One canonical record per entity

Our Postgres holds the canonical row for each waitlist signup, tenant, and device count. HubSpot stores CRM-relevant fields.

Stripe handles billing. They're stitched together by external reference IDs we store on our side – HubSpot company_id, Stripe customer_id, and so on – rather than by running a sync job that tries to keep two databases in agreement.

That means if HubSpot's reporting falls short for something we need (and it does, often – the full waitlist → access code → active tenant funnel doesn't exist as a native HubSpot report), we just build the report off our own database. The investor data room runs off the same data the customer health dashboard does.

Why we cared about this so early

This isn't infrastructure most pre-revenue startups build. Most teams we've talked to wait until the CRM is unusable, then hire a marketing ops person to dig out of it. By that point the historical data is gone – you can't recover what a signup's MSP confidence was in 2024 if you never scored it.

The trick is that doing it upfront isn't expensive. The whole thing is a Postgres table and a Claude call, plumbed into HubSpot via webhook. Whatever automation we layer on top later inherits clean inputs.

Follow the show on YouTube and our website.

Michael Assraf

Founder and CEO

Hey everyone, I'm Michael - founder and CEO of Flamingo. Before this, I built Vicarius, a cybersecurity company focused on vulnerability remediation, where I raised over $60M in funding. Working closely with service providers through that journey, I saw firsthand how MSPs were losing money to vendor payouts and inefficient systems - and that's when the idea for Flamingo clicked. I set out to build an open-source platform that dramatically increases MSP margins while helping them deliver better service to their clients.

Related Content

Blog Posts

Product Releases

Podcasts

Webinars

Case Studies

Events

Onboarding Guides

Frequently Asked Questions

About OpenFrame

OpenFrame isn't built to plug into your stack. It replaces it. Instead of duct-taping a dozen tools together (RMM, MDM, SIEM, patching, remote access, each its own login and bill), we bundle it into one unified platform: RMM, MDM, monitoring, automation, remote access, patch management, security monitoring, and ticketing, plus built-in AI copilots. So "does it integrate with X?" usually means: you won't need X anymore.
Most platforms give you one piece and expect you to bolt the rest on. OpenFrame unifies the whole stack in one place, with AI copilots built in. Fewer logins, fewer bills, less duct tape.
Both. It's built for MSPs and MSSPs alike.
In the cloud, on US soil. Your data stays stateside.

MSP AI Agents

Yes. In production MSP shops today, 10% to 25% of tickets close before a human opens them. Thread alone has processed 173 million tickets across 750-plus MSP partners at 96% triage accuracy, handing back 490,000-plus technician hours. Agents own the low-risk, high-volume work (password resets, MFA enrollment, known installs, onboarding and offboarding) and flag anything that touches production data or needs judgment for a human to take.
On a five-person desk, reported deployments show $78,000 to $130,000 in annual direct labor savings, roughly 30% fewer escalations, and 15% to 20% better SLA compliance. Broader MSP adoption data adds ticket handling time cut by 45% and five to 12 points of margin, all from reclaimed capacity rather than headcount cuts.

AI MSP

MSPs use AI to triage and route tickets, cut alert noise, schedule patches, assist L1 security work, and draft client reports. Kaseya's 2025 benchmark found 30% already use it to eliminate tedious tasks, with ticket triage the most common starting point.
Most MSPs start with AI features inside their existing PSA, RMM, and ticketing systems rather than standalone products. Common categories include AI ticket triage, alert correlation, scripting assistants, and AI-native all-in-one platforms like OpenFrame that run intelligence across the whole stack.
Start with a readiness assessment, not a tool purchase. Confirm your ticket history is clean and your RMM, PSA, and monitoring systems connect. Then pick one high-volume, low-risk workflow, usually ticket triage, and pilot it on internal tickets before any client sees it.
Automate high-volume, low-risk tasks first. Ticket triage and alert noise reduction top the list because they run constantly and a human still resolves the underlying issue. Save security approvals, billing changes, and client-facing actions for later, always with a human in the loop.