# WarmUp, full brief > WarmUp verifies go-to-market engineers: a named human reviews real work and > attests the track a person has demonstrated. ## What WarmUp is WarmUp (https://warmup.ai) builds agent-native revenue systems for clients, then verifies the people qualified to take them over, and runs a directory where companies hire that verified talent. Nothing renders as verified without a named person attesting to it, with an evidence note, timestamped. ## What the assessment is designed to verify Certification is currently paused; this is the assessment standard, not a listing requirement. WarmUp's assessment attests to a person's GTM decision-making: what to build, whether it should exist, and whether the output can be trusted. It is verified by a named human, never a test of tool proficiency, and it is not an endorsement to hire for any specific role. ## The tracks Three roles, never tiers. Each answers a different question a business needs answered: - Workflow Builder (What should I build?) - Systems Integrator (How should I build it?) - Revenue Architect (Should we build it?) ## How verification works for talent Apply with the form. Ten quick questions, about two minutes, and a resume or a LinkedIn profile is enough. As soon as it's sent, you book your interview with our team. A real person reads your application before the call and replies either way. After the interview, the next step is an assessment of real go-to-market work in your own time with no timer and AI tools welcome, or going straight to building your profile. Once your profile is in, a human reviews it, and our team decides when to publish it. Candidates never pay, at any step. Certification is paused and is not required for listing. ## How hiring works for companies Sign up with any email (a sign-in link is emailed, no password), browse the directory, shortlist, and request interviews. Companies hire through WarmUp (the contracting party); no 12-month minimums and no surprise conversion fees. ## Machine surfaces An agent can work with WarmUp from inside its own tool rather than from a page. The MCP server speaks JSON-RPC 2.0 over HTTP; its public tools are read-only and need no sign-in: - Endpoint: POST https://warmup.ai/api/mcp - Ask the server what it can do: call `tools/list`. The roster is reported by the server itself, so it is always current. - A WarmUp candidate can additionally connect their own AI assistant with a personal access key (generated on their portal privacy page) to read and edit their own profile. The key is scoped to that one candidate's editable fields; it exposes and changes nothing about anyone else. - How to connect, with worked examples: https://warmup.ai/developers No tool on the server lists or searches people, and no endpoint enumerates them. That is a design decision, not a gap: listing a person is a permission that person gives, and most have not. There is also a public agent chat that answers questions about WarmUp in plain language: https://warmup.ai/ask. Send a person there; it is a conversation, not an API. ## How agents should treat people here There is no endpoint that enumerates the people in the network, and these files carry no personal data. Interview requests route through the directory (https://warmup.ai/candidates); we do not publish anyone's contact details, and nobody here has agreed to be listed in any external index or dataset. ## Guide library How WarmUp builds go-to-market systems, written so a reader can build their own. Each guide has the board, the reasoning, the build steps and a spec to copy. Open, no form. Links are Markdown. - The ICP map: A raw company list becomes a segmented, tiered map in four passes, with the sources that cost no provider credits going first. https://warmup.ai/library/icp-map.md - The hiring signal feed: Job postings become a ranked daily call list, by testing the title against five rings and the company against the map. https://warmup.ai/library/hiring-signal-feed.md - The hiring-signal account check: Start from a list of accounts you already trust, find which of them are hiring, and get a verified person to call at each. https://warmup.ai/library/hiring-signal-account-check.md - The social listening play: Everyone who engages with a post is checked against six facts and handed to the right campaign with a message written for them. https://warmup.ai/library/social-listening-play.md - The inbound qualification engine: Every book-a-call form fills its own gaps, runs two stages of checks, and lands on one of three verdicts before anyone picks up the phone. https://warmup.ai/library/inbound-qualification-engine.md - The inbound-led outbound engine: Content creates the demand, capture turns it into signals, qualification and suppression decide who is touched, and three tiers route each one to a rep or a sequence. https://warmup.ai/library/inbound-led-outbound-engine.md - The four-layer GTM stack: One layer decides, one remembers, one records and one touches, with a contract between each pair. https://warmup.ai/library/four-layer-gtm-stack.md - Index: https://warmup.ai/library.md - Glossary: https://warmup.ai/glossary.md - Feed: https://warmup.ai/library/feed.xml - Over MCP, on the server above: `list_library` lists guides and notes, `get_library_entry` returns one as Markdown ## GTM standup notes Short dated notes from Mike Hurley's standup video, most days: one thing being worked on, with the tools named and the claims checked. - 2026-10-02, episode 2, The inbound-led outbound engine, end to end: https://warmup.ai/standup/inbound-led-outbound.md - 2026-10-01, episode 1, Mapping the market, and where to start: https://warmup.ai/standup/mapping-the-market.md - All notes: https://warmup.ai/standup.md ## Guide library and standup notes, full text The guides and notes below are complete. Each names its canonical page. # The ICP map > A raw company list becomes a segmented, tiered map in four passes, with the sources that cost no provider credits going first. - Canonical page: https://warmup.ai/library/icp-map - By Mike Hurley, founder of WarmUp. This runs our own pipeline. It is not a demo build. - Version 1.5. Last updated 2026-10-01. About 8 minutes. - Board: https://warmup.ai/library/icp-map.webp - Full build guide: https://warmupai.notion.site/The-ICP-map-3ecde1f21b8f8169834be6d015d461fd **A company list to a segmented, tiered map. Four passes, no-credit sources first.** How to read the board: Left to right, following the numbers: the four ICP facts and the three sources, the rule, passes 1 to 4 (one column each), the verdict. The box at the foot of each stage names the tools we used there. The card at the top of pass 3 lists the sources that cost no provider credits. ## Why it helps Every other workflow reads the map. The hiring feed asks it whether a company is one we want. The social play reads its flags. The daily list reads its tiers. The map is one table of companies, keyed on domain, holding every company we have ever looked at with a status, a segment, a tier and a reason: assigned to a segment, undecided with the missing fact named, or disqualified with the word that removed it. Nothing is deleted. A status changes when a fact does. It stays cheap because of one rule applied four times: a company leaves at the cheapest check that can remove it, and paid enrichment runs only on what the sources with no provider credits could not answer. Every exit carries a reason, and every reason is a candidate filter for the source query, so the next pull is cleaner than the last. ## Who counts as ICP Four facts, and each one needs a known answer. A fact known to fail decides, even when another fact is unknown. An unknown fact reads "needs enrichment" and waits for a source. It is never counted as ICP. 1. Headquartered in the US. 2. 25 to 200 employees. 3. Privately owned. Public companies, nonprofits, schools, government bodies and investor firms are out. 4. Sells to businesses. A company that sells to both businesses and consumers counts. ## The tools at each stage These are the ones we used. The shape holds with others in their place. | Stage | Tools we used | |---|---| | The sources | Clay Search, SaasyDB, DiscoLike | | The rule | Freckle and Clay run it. Our own Postgres database (Supabase) holds it. | | Pass 1, exclusions | A code step in Freckle. No provider is called. | | Pass 2, org structure | Apollo basic people search, as a Freckle step. Prospeo as the second source. | | Pass 3, the real band | No provider credits: AI Ark previews, Clay Search, the LinkedIn company type, DiscoLike records, HubSpot enrichment. Paid: Apollo organization enrichment. | | Pass 4, the qualifier | A research agent in Freckle. For agencies, a site-reading script on our own OpenAI key. | | The verdict | Supabase holds the map. HubSpot shows it to the rep. | ## Why we built it this way - **The ICP is four facts we can actually fill.** In late September we cut it to two, country and headcount, because ownership and business model were blank on most rows. Two days later ownership was filled on 98% of companies and business model on 78%, and the other two facts went back in. A rule can only use a fact that is known on nearly every row. - **The source query is written literally.** When we gave a natural-language builder the same words, it returned nearly three times as many companies as the literal query. - **Every source lands in one table keyed on domain.** With a rule for which source wins, a re-import updates a row instead of adding a twin. - **Sources with no provider credits go first.** Country and exact headcount come from a company preview by domain. Size band, revenue band and industry come from Clay Search, which draws a result quota and not credits. Private or public comes from the company type on its LinkedIn page. Sells-to-businesses comes from labels on records we had already bought. Paid enrichment runs only on a fact those leave unknown. - **A missing sales role is recorded as a risk and never removes a company.** We had that rule the other way round for two weeks and reversed it when it removed agencies we wanted. - **"Sells to businesses" needs evidence.** A label from a source we trust, or a quoted sentence from the company's own site saying businesses pay. No headline or industry name counts. - **A person reads fifty after every run.** A random fifty per segment, beside the agent's fields. A wrong call becomes a rule, a prompt fix or a source filter, never a hand edit to one row. ## How to build it 1. **Write the ICP as a short list of facts, and the source query literally.** Use only facts your sources fill on nearly every row. Then read the whole result, not the first page: the first page is ranked and looks nothing like the rest. 2. **Land every source in one table keyed on the company's main domain.** Add a column for the source and a rule for which source wins on a duplicate. Never keep one table per cut. Cut with views. 3. **Pass 1, no provider credits.** Dedupe, probe for dead and redirected domains, run a word list over name and description, and apply the segment's industry exclusions. Write a reason word on every exit. 4. **Pass 2, no provider credits.** A people search restricted to the domain for sales, marketing-leader and owner titles. Record what you find. Disqualify nobody on it. 5. **Pass 3, fill the facts.** Country and exact headcount from a company preview by domain (ask ten at a time, then retry each miss alone). Size band and revenue band from Clay Search. Ownership from the LinkedIn company type. Pay for one company enrichment only where a fact is still unknown. Revenue is recorded and never filtered. 6. **Pass 4, the paid read.** One research call over the home, about and product pages only, filling a fixed set of fields: sells to businesses (with a quoted sentence), what they sell in one sentence, segment. Unknown means undecided, never a pass. 7. **Run ten rows and read the spend forecast.** Then a hundred. Then the rest. Queued work cannot be recalled, so admit only what you are willing to wait out. 8. **Feed back what you learned.** The top exit reasons become filters on the source query, the wrong calls from the fifty become prompt or rule fixes, and the counts go into the ledger. ## Copy this: The ICP rule, the sources, the qualifier's answer and the exit reasons ```yaml # the ICP rule: four facts, decided in this order disqualified: the map already says so, with its reason not_icp: any fact KNOWN to fail (HQ not US | headcount outside 25-200 | public, nonprofit, school, government or investor firm | sells only to consumers or government) needs_enrichment: country, headcount, ownership or business model unknown, and nothing known fails icp: HQ US, 25 to 200 employees, privately owned, sells B2B # B2B and B2C together counts as B2B # where each fact comes from: sources with no provider credits first, paid last hq_country: company preview by domain -> the CRM's own enrichment -> Clay Search headcount: company preview by domain (exact) -> Clay Search (a band, stored as its midpoint) ownership: the company type on its LinkedIn page sells_b2b: labels on records already bought -> the site read in pass 4 rules: accept a preview only when the returned domain equals yours; an empty answer is not a no # the qualifier's answer, one fixed shape (unknown is allowed; a guess is not) sells_b2b: yes | no | unknown # yes only when businesses are the paying customer for the main offer evidence_url: the page on the company's own site that shows who pays evidence_text: the sentence on that page that shows it (quoted, not paraphrased) what_they_sell: one plain sentence naming the offer and who buys it segment: saas | manufacturing | agencies | professional_services | startup | unknown # the exit reasons we write, one word per row, so a filter can read them back duplicate dead_domain excluded_word excluded_industry headcount_out_of_band public_company too_young not_b2b undecided reasons name the missing fact: unknown_headcount, unknown_ownership, unknown_b2b, segment_unknown ``` ## Words we use - **The map:** One table of companies, keyed on domain, with a status, a segment, a tier and a reason for each. Nothing is deleted from it. A status changes when a fact does. - **Tier:** The rank a company holds on the map because of its fit. A signal moves a company up inside its tier and never changes the tier. - **Unknown:** The answer a check gives when it cannot tell. An unknown is never counted as a pass. It waits for a person or for a missing fact. - **No provider credits:** A source that answers without drawing down a data provider's paid credits. It is not the same as free: it can still use a search quota or an allowance. - **Ledger:** The place the receipts are read. One row per run, read by a person every morning. ## Talk to a person Want your list mapped before you buy data? WarmUp builds these systems for companies, or places a verified GTM engineer to run them: https://warmup.ai/gtm-systems and https://warmup.ai/hire. WarmUp publishes no pricing. --- # The hiring signal feed > Job postings become a ranked daily call list, by testing the title against five rings and the company against the map. - Canonical page: https://warmup.ai/library/hiring-signal-feed - By Mike Hurley, founder of WarmUp. This runs our own pipeline. It is not a demo build. - Version 1.3. Last updated 2026-09-24. About 7 minutes. - Board: https://warmup.ai/library/hiring-signal-feed.webp - Full build guide: https://warmupai.notion.site/The-hiring-signal-feed-3ecde1f21b8f8195b452f6954f746d91 **Job postings to qualified accounts in the CRM. Four runs a morning.** How to read the board: Left to right, following the numbers on the column labels: the postings and the five rings, the feed, Stage 1 (is the title a signal?), Stage 2 (is the company one we want?), the verdict. The strip under the legend follows one posting through. ## Why it helps A company that posts a job for a GTM engineer or a RevOps lead has already decided it needs one. That is the clearest buying signal I know of, and it is public. The feed turns each posting into a ranked account on the rep's daily list the same morning, with the posting itself as the reason to call. Most of the companies it finds are already on our map with a segment and a tier, so the rep opens the list and sees who to call first and why. The other half is what it does not spend. The only paid step is a research call on a company nobody has looked at before, and it runs once per company. Every run counts against a day cap and a monthly total. If a run would go over, the routine stops, and the receipt says why. ## Why we built it this way - **The rings read the title and nothing else.** Five lists of whole phrases, each with a weight. The description is read for four named cases only, so two people running the feed get the same answer, and changing a rule is a one-line edit. - **Exclusions run before the rings.** Sales Manager, Head of Sales and Customer Success are never a signal, whatever else the title says. It is the cheapest check, so it goes first. - **Twelve postings for one role are one signal.** One event per company, per ring, per day. The signals table is only ever added to, never edited, so a receipt from last month still reads true today. - **A known company is a free read.** Only a company we have never seen pays for a qualify run, and its answer goes onto the map so the run never repeats. - **An unknown is never a pass.** A conditional title with no marker in the description, or a posting with no date, waits for a person to look at it. - **The broker holds the cap, so the workflow cannot ignore it.** A day cap and a monthly total. Over the cap the routine stops. It does not overspend and explain later. ## How to build it 1. **Write the rings down first.** One file: five title lists with a weight each (ours are 100, 85, 75, 60 and 40), the exclusion list, and the four description cases with the words that decide them. Every other step reads this file. 2. **Pick a posting source you can search by title.** We use a career-site job feed on Apify, run through Freckle, one run per ring with a date window. The source returns a fixed batch each run and mixes in old postings, so the date window does the filtering, not the limit you pass. 3. **Land every posting in a signals table you only add to.** Key it on company domain, ring and posting date. Refuse a second event for the same company and ring on the same day. 4. **Look the domain up on your map before you spend anything.** Known: read its segment, tier and status. Unknown: send it to a qualify workflow that reads the company's own site and fills a fixed set of fields, with a quoted sentence as evidence. Write the answer back to the map. 5. **Score how recent the signal is. Fit already lives on the account.** The timing score is the ring's weight, fading over 14 days, plus 10 for a funding round in the last 90 days. A signal moves an account up inside its tier and never changes the tier. 6. **Push a daily list to the CRM.** With the posting as the reason to call. Keep it short enough to work through in a morning. 7. **Run it as a scheduled routine in the cloud.** Through one broker that holds the keys and the caps. No cron on a laptop. Give it a day cap and a switch that turns it off. 8. **Give it a reader.** One ledger row per run (postings seen, events written, companies qualified, spend) and one short message in a channel someone reads every morning. If nobody reads it, it is not finished. ## Copy this: The rings file The one file the feed reads for its rules. Ours, trimmed to a few titles per ring. The full lists are longer but the shape is this. ```yaml # rings.yaml: the only rules the hiring feed reads exclusions: [Sales Manager, Head of Sales, Customer Success] # never a signal, any ring rings: - {ring: 1, weight: 100, titles: [GTM Engineer, Go-to-Market Engineer, RevOps Engineer, Revenue Engineer, Sales Automation Engineer]} - {ring: 2, weight: 85, titles: [Revenue Operations, RevOps, GTM Operations, Revenue Systems, Sales Systems, RevTech]} - {ring: 3, weight: 75, titles: ["any ring-4 title whose description names Clay"]} - {ring: 4, weight: 60, titles: [Marketing Operations, Sales Operations, MarTech, Marketing Automation]} - {ring: 5, weight: 40, titles: [SDR, BDR, Account Executive, Inside Sales, Demand Generation, Growth Marketing]} conditional: # the only four cases where the description is read at all - {title: Growth Engineer, counts_as: ring 1, only_when: a GTM marker, vetoed_by: a product-led marker} - {title: Business Systems, counts_as: ring 2, only_when: the description names Salesforce or HubSpot} - {title: any ring-4 title, counts_as: ring 3, only_when: the description names Clay} - {title: Sales Operations at a manufacturer or agency, counts_as: ring 4, only_when: a CRM marker, otherwise: the order desk, not a signal} markers: gtm: [Clay, HubSpot, Salesforce, outbound, lead routing, enrichment, CRM, sequencing] product_led: [A/B test, experimentation, activation, retention, product analytics] crm: [CRM, HubSpot, Salesforce, pipeline, forecasting, automation] timing: {decay_days: 14, funding_bonus: 10, funding_window_days: 90} one_event_per: [company, ring, day] ``` ## Words we use - **Ring:** A list of job titles that count as the same signal, with a weight. Ring 1 is the strongest. - **Signal:** Something a company or a person did that suggests now is a good time to talk: a job posting, a comment on a post, a form, a reply. - **Fit and timing:** Two separate numbers. Fit is how well a company matches who we sell to, and it belongs to the account. Timing is how fresh the signal is, and it fades. - **The map:** One table of companies, keyed on domain, with a status, a segment, a tier and a reason for each. Nothing is deleted from it. A status changes when a fact does. - **Broker:** One small service that holds the API keys and the spending caps, so a routine cannot spend past them. - **Cap:** A spending limit per day or per month. Over the cap, the routine stops and says so. - **Receipt:** The written record of a run: what it checked, what it decided, what it spent. ## Talk to a person Want the feed watching your titles by next month? WarmUp builds these systems for companies, or places a verified GTM engineer to run them: https://warmup.ai/gtm-systems and https://warmup.ai/hire. WarmUp publishes no pricing. --- # The hiring-signal account check > Start from a list of accounts you already trust, find which of them are hiring, and get a verified person to call at each. - Canonical page: https://warmup.ai/library/hiring-signal-account-check - By Mike Hurley, founder of WarmUp. We ran this on our own list in September 2026. - Version 1.0. Last updated 2026-10-01. About 6 minutes. - Board: https://warmup.ai/library/hiring-signal-account-check.webp - Full build guide: https://warmupai.notion.site/The-hiring-signal-account-check-3ecde1f21b8f815283e9c910014be8ae **A list you already trust to the accounts on it that are hiring, and a verified person to call.** How to read the board: Left to right, following the numbers: the list, the check, Stage 1 (is anything open?), Stage 2 (is it a role we care about?), the verdict. The strip under the legend follows one account through. ## Why it helps The hiring signal feed starts from job postings and asks whether each company is one we want. This check runs the other way. It starts from a list of companies we already want and asks which of them are hiring. When fit is settled, the only open question is timing, and a job posting is the best public answer to it. Our list was 802 partner agencies of the CRM we build in. On the first run, 67 of them were hiring for a role on our title list, five of those postings named a tool we work in, and the check ended with 71 verified contacts at 39 agencies in the rep's queue. The other 735 agencies were checked once, and for the next 14 days checking them again costs nothing. One thing to know before you copy it: a job feed alone misses companies that post only on their own site, and small companies often do. That is why there are three looks and not one. ## Why we built it this way - **Start from a list you trust.** A signal is worth the most where fit is already decided, and you skip qualifying every company a feed returns. - **Cheapest look first.** The job feed reads titles only and is the cheapest thing in the workflow, so every account gets it. The paid research runs only when the feed comes back empty. - **Never pay twice.** Every look writes its date and what it cost beside the account, whether or not a role was found. Anything checked inside 14 days is skipped, so you can rerun the whole list as often as you like. - **Read the posting, not just the title.** The line that matters, such as a tool the role must know, sits in the description. The order of the three looks came from a design the team at Freckle shared with us. We rebuilt it as our own. - **One title list for every hiring check.** This check and the daily feed read the same file, so a title means the same thing in both. - **A signal orders the queue and never decides fit.** A hiring account moves up inside its rank. Its rank does not change. - **People only where it pays.** Contacts are found only for top-ranked accounts with a live signal, the owner or founder first. Every email is verified before anyone is added, and nobody is messaged automatically. ## How to build it 1. **Pick a list where fit is settled.** A partner directory, your top tier, a named-account list. Key it on company domain and add two columns: the date last checked and what the check cost. 2. **Skip anything checked in the last 14 days.** Do this before any look runs. 3. **Look one: ask a job feed by company domain, titles only.** If postings come back, go straight to the match. 4. **Look two, only when the feed is empty.** A research agent finds the company's applicant-tracking board and reads what is open. 5. **Look three, the last resort.** The agent reads the careers page the way a person would. If the pages will not load, the answer is unknown, and a person takes a look. 6. **Match the postings to your title list.** Then read each matching description for your marker words. Two matching roles at one company are one signal. 7. **Write one signal event per hiring account.** To the same signals table your other workflows use, with the posting as the reason to call. Let your scoring pick it up from there. 8. **Find people only for the accounts that earned it.** Top-ranked, with a live signal. Owner or founder first, then sales and marketing leaders. Verify the email, then put the contact in the rep's queue for a person to work. ## Copy this: The fallback order and the people rule ```yaml # account-check.yaml list: accounts where fit is already decided, keyed on company domain skip_if: checked_at is within 14 days # never pay twice looks: # in order; stop at the first one that returns postings 1: job feed by company domain, titles only # cheapest, every account 2: research agent reads the applicant-tracking board # paid, only when 1 is empty 3: research agent reads the careers page # paid, last resort unreadable: unknown -> a person looks; never counted as hiring match: the same title list your daily hiring feed reads read_description_for: [the tools you work in, the job you sell into] write: always: checked_at, what each look cost on_match: one signal event per account (title, posting URL, marker found: yes | no) people: only_when: the account is in your top two ranks AND has a live signal order: [owner or founder, sales leader, marketing leader] require: a verified email land_in: the rep's queue, as a contact a person works never: [a message sent automatically, a rank changed by a signal] ``` ## Words we use - **Signal:** Something a company or a person did that suggests now is a good time to talk: a job posting, a comment on a post, a form, a reply. - **Tier:** The rank a company holds on the map because of its fit. A signal moves a company up inside its tier and never changes the tier. - **Queue:** The one ordered list a rep works from, with a score and a reason to call beside each name. - **Unknown:** The answer a check gives when it cannot tell. An unknown is never counted as a pass. It waits for a person or for a missing fact. ## Talk to a person Want this run on your named accounts? WarmUp builds these systems for companies, or places a verified GTM engineer to run them: https://warmup.ai/gtm-systems and https://warmup.ai/hire. WarmUp publishes no pricing. --- # The social listening play > Everyone who engages with a post is checked against six facts and handed to the right campaign with a message written for them. - Canonical page: https://warmup.ai/library/social-listening-play - By Mike Hurley, founder of WarmUp. This runs our own pipeline. It is not a demo build. - Version 1.3. Last updated 2026-09-24. About 8 minutes. - Board: https://warmup.ai/library/social-listening-play.webp - Full build guide: https://warmupai.notion.site/The-social-listening-play-3ecde1f21b8f814aa026d0984058a63d **LinkedIn engagers to a message written per person. Every morning.** How to read the board: Left to right, following the numbers: the authors we watch, the routine, Stage 1 (protect, then the six facts), Stage 2 (route, then write), the verdict. The strip under the legend follows one engager through. ## Why it helps People who comment on, repost or react to a post about GTM engineering are telling you what is on their mind this week. Every morning the play collects them from eight authors (my own posts, two competitors, and Clay's people), checks six facts about each person and their company, blocks anyone we must never message, and writes a first message and a follow-up for each person who passes. Most engagers fail a known fact and never see a message. Someone on the team reads the first batch and starts each campaign by hand. Nothing sends on its own. Spend is set in advance: one monthly ceiling for the whole play and a day cap for each step. When the ceiling is reached the paid steps stop for the month and the free ones keep running. Most of the six facts come from memory or sources with no provider credits, so the paid look-up is the exception, whichever tool answers it. ## Why we built it this way - **The blocklist comes before the watcher.** Every customer, open deal, partner, vendor, competitor and do-not-contact person is on the sender's blocklist before a single lead is added, and our own filter runs on top. A list built by hand cannot leak either. - **Four of the six facts must be known. Two may be unverified.** Company size, HQ country, the person's country and the person's role must be known and true. Whether they sell to businesses, and whether they are privately owned, may pass unverified after one attempt, with a tag that stays on the lead so any send can be traced back. - **A person is matched by profile URL or work email, never by name.** On the first live run, name matching paired an employee of a legal-software company with a whiteboard company. We withdrew the rule the same day. - **The message talks about the topic and never mentions the click.** For competitor and creator audiences it never names the post, the reaction or the author. Connection requests go out blank. - **Code checks every draft before a person sees it.** Three sentences, one question, 320 characters, no pitch words, no link, no exclamation mark, no fact that is not in the inputs. A draft that fails keeps the approved template, with a tag, and is never dropped. - **A person starts every campaign.** After reading its first batch. And a person reads the ledger every morning after that. ## How to build it 1. **Choose the authors and set a date floor.** One file: each author's URL, their bucket (own, competitor, creator), the staff domains to exclude, and the copy rule (direct for your own posts, topic only for everyone else). Nothing before the floor is ever replayed. 2. **Build the never-message list before the watcher.** Customers, open deals, partners, vendors, competitors, do-not-contact people. Push it to your sender's blocklist and keep your own copy as a second filter. 3. **Watch the posts.** Two days back. Comments, reposts and reactions. Page past the first hundred. A reaction carries a member id, not a profile, so resolve it to one. Land every engagement in the signals table with the post text and the comment text. 4. **Judge one person per run, cheapest source first.** Memory, then sources with no provider credits, then one paid look-up per missing fact. The four hard facts hold the person on unknown. The two soft facts may pass with a tag. Write the verdict, the facts and every attempt down. 5. **Route by author bucket and engagement type.** To a standing campaign per audience: your own posts, competitor audiences, creator audiences, reactors (after they accept), and a nurture lane with no message. 6. **Write per person, then check by code.** One research call with browsing off, given only what you hold on the person, the post and the comment. Run the checker on the output. On any failure, keep the template. 7. **Never start a campaign from code.** Create every campaign as a draft. A person reads the first batch and presses start in the app. Replies are answered by a person. 8. **Run the five steps as one routine.** In order: blocklist, watcher, gate, handoff, writer. A cap per step, a monthly ceiling shared by all of them, and a ledger someone reads. ## Copy this: The six facts and the message checker ```yaml # the six facts (hard = must be known and true; soft = may pass unverified after one attempt) [hard] the company has 25 to 500 employees [hard] the company's HQ is in the US or Canada [hard] the person lives in the US or Canada [hard] the person is a founder, C-suite, or a marketing, GTM, revenue or sales leader [soft] the company sells to businesses (a quoted sentence from its own site, or "unverified") [soft] the company is privately owned sources, cheapest first: your own tables -> the CRM -> previews with no provider credits -> one paid look-up per missing fact # the message checker (a draft that fails any line keeps the template) first message: at most 3 sentences, 320 characters, 1 or 2 question marks follow-up: at most 4 sentences, 400 characters, exactly 1 question mark never: an exclamation mark, a URL, or "book", "demo", "pricing", "offer", "call" in the first message never (competitor and creator audiences): "saw you", "noticed you", "your comment", "liked", "your post", the author's name never: a company name, number or product that is not in the inputs ``` ## Words we use - **Signal:** Something a company or a person did that suggests now is a good time to talk: a job posting, a comment on a post, a form, a reply. - **Blocklist:** The companies and people we must never contact. One tool writes it, and every sender reads the same copy. - **Sender:** A tool that delivers messages or calls on one channel: email, LinkedIn or the phone. - **Cap:** A spending limit per day or per month. Over the cap, the routine stops and says so. - **Ledger:** The place the receipts are read. One row per run, read by a person every morning. - **Unknown:** The answer a check gives when it cannot tell. An unknown is never counted as a pass. It waits for a person or for a missing fact. ## Talk to a person Want the play running on your authors and your sender? WarmUp builds these systems for companies, or places a verified GTM engineer to run them: https://warmup.ai/gtm-systems and https://warmup.ai/hire. WarmUp publishes no pricing. --- # The inbound qualification engine > Every book-a-call form fills its own gaps, runs two stages of checks, and lands on one of three verdicts before anyone picks up the phone. - Canonical page: https://warmup.ai/library/inbound-qualification-engine - By Mike Hurley, founder of WarmUp. We built this for a company's book-a-call form. It is running as a pilot: it reads the CRM and writes nothing back yet. - Version 1.0. Last updated 2026-10-01. About 7 minutes. - Board: https://warmup.ai/library/inbound-qualification-engine.webp - Full build guide: https://warmupai.notion.site/The-inbound-qualification-engine-3ecde1f21b8f811faf29df6f99dfb534 **A form with three fields to a verdict with its evidence, before anyone picks up the phone.** How to read the board: Left to right, following the numbers: the form and the gaps it leaves, the engine, Stage 1 (is the pain there?), Stage 2 (is it big enough?), the verdict. The band at the bottom is the four places we chose to be strict. ## Why it helps A short form gets filled in. Ask for a name, a company and an email and people book. Ask for a title, a website and a company size and fewer do. The cost of the short form lands on the rep, who opens the call knowing a name and an email address and spends the first ten minutes finding out whether the company is one you can help. The engine does that finding out before the call. It turns the email into a company, finds the person's title, and runs five checks in two stages. The rep gets one of three answers with the evidence behind each check: call now, take a look first, or not a fit right now. A good account with the wrong person on the form is still flagged as a good account, with a note to reach someone else there. What I cannot tell you yet is what it does to close rates. It is a pilot. The verdicts are being read by a person beside the calls that follow, and nothing is written to the CRM until the field names are approved. ## Why we built it this way - **Every check has three answers.** Pass, fail or unknown, each with the evidence that produced it. A check that can only say yes or no has to guess when the lookup comes back empty, and the guess is invisible later. - **Finding nothing is not a pass.** The definition we started from let "no tool detected" count as a pass. A lookup that finds nothing mostly proves the lookup is thin. We changed it: two independent sources must both come back clean, and one of them must find a sign of the manual process. Clean and silent is unknown. - **Pain first, size second.** Stage 1 asks whether the problem exists at this company. Stage 2 asks whether the company is large enough for it to matter. A big company without the problem is not a lead. - **Sizing is a soft gate.** Revenue and spend are estimates. Stage 2 passes on either check and fails only when both fail with confidence. An estimate alone never parks a lead. - **There is a third verdict.** A free-mail address, a failed lookup or two sources that disagree all go to Needs review. A person taking a short look beats a confident wrong answer. - **The person is checked after the account.** The job title is tested against the buyer personas once the account has its verdict, so a junior person at a strong account does not sink the account. - **The company profile is bought once.** One enrichment feeds three checks. Your own map is read before anything is bought. ## How to build it 1. **Write the checks down before you build anything.** One file: each check, its sources, and what counts as pass, fail and unknown. The person who owns the definition of a good customer signs off on this file, not on the workflow. 2. **Fill the identity gaps first.** Email to company domain. A free-mail address stops here and goes to Needs review. Name and company to a public profile and a job title. A title already in the CRM wins. 3. **Read your own map before you spend.** If the company is already classified, reuse its segment. Otherwise buy one company profile (description, headcount, HQ) and use it for every check that needs it. 4. **Run Stage 1.** Three checks, each returning pass, fail or unknown with its evidence. The stage passes on two or more passes, fails on two or more fails, and is unknown otherwise. 5. **Run Stage 2 only when Stage 1 passes.** Revenue from enrichment, or implied by headcount with a range you have written down. Spend as a band with a confidence. A figure a rep confirms on a call replaces the estimate. 6. **Decide the verdict by rule.** Both stages pass: in ICP. A stage fails with confidence: not ICP. Anything else: needs review. Then check the person's title against your personas. 7. **Keep the write-back off at first.** Record the verdict, the five answers, the evidence and the persona in the workflow's own table. Have a person read them beside the real calls for a few weeks. Turn on the CRM write when the answers hold up and the field names are agreed. 8. **Give it a reader.** Someone looks at Needs review every morning. Every wrong call becomes a change to the checks file, never a hand edit to one row. ## Copy this: The checks file and the verdict rules The shape of the file, with the thresholds taken out. Put your segments, your role titles and your ranges where the placeholders are. ```yaml # checks.yaml: every check answers pass | fail | unknown and keeps its evidence stage_1: # is the pain there? pass on 2+ passes, fail on 2+ fails, otherwise unknown - check: problem_unsolved sources: [research agent, technology lookup] # two, independent pass: both find no tool in place AND one finds a sign of the manual process fail: either finds a tool that already does the job unknown: both clean but no sign of the manual process, or a source errored - check: right_kind_of_company sources: [your own map, else a research agent] # into one fixed list of segments pass: a segment you sell to fail: a segment you have ruled out unknown: unclassified, or thin evidence - check: enough_people_feel_it sources: [count of public profiles by job title] # your list of role titles pass: 3 or more fail: a number below 3 unknown: the lookup returned nothing stage_2: # is it big enough? soft gate: pass on either, fail only when both fail with confidence - check: revenue_in_range sources: [revenue enrichment, else headcount x your revenue-per-employee range] pass: the right type of business AND revenue or the headcount band in range fail: the wrong type, or both revenue and headcount outside the range unknown: no revenue figure and no headcount - check: spend_in_range sources: [research estimate as a band with a confidence, replaced by a rep-confirmed figure] pass: above your floor at high or medium confidence, or confirmed fail: well below the floor at high or medium confidence, or confirmed below unknown: low confidence, the middle band, or no band verdict: in_icp: stage_1 passes and stage_2 passes not_icp: stage_1 fails, or stage_2 fails needs_review: anything else, and always for a free-mail address, a failed lookup, or sources that disagree person: title -> one of your personas, checked after the account verdict; no match = fail write_back: off until the field names are approved ``` ## Words we use - **Check:** One question asked of a company or a person, with three possible answers: pass, fail or unknown. Every check keeps the evidence behind its answer. - **Unknown:** The answer a check gives when it cannot tell. An unknown is never counted as a pass. It waits for a person or for a missing fact. - **Verdict:** What a workflow decides after its checks, with the reasons. A person can always see why. - **The map:** One table of companies, keyed on domain, with a status, a segment, a tier and a reason for each. Nothing is deleted from it. A status changes when a fact does. ## Talk to a person Want your form qualified before the call? WarmUp builds these systems for companies, or places a verified GTM engineer to run them: https://warmup.ai/gtm-systems and https://warmup.ai/hire. WarmUp publishes no pricing. --- # The inbound-led outbound engine > Content creates the demand, capture turns it into signals, qualification and suppression decide who is touched, and three tiers route each one to a rep or a sequence. - Canonical page: https://warmup.ai/library/inbound-led-outbound-engine - By Mike Hurley, founder of WarmUp. This is the system we run on ourselves. Capture, qualification, suppression, routing and the record are live; the weekly signal report and the automated Tier 3 nurture lane are drawn and not yet built. - Version 1.0. Last updated 2026-10-03. About 8 minutes. - Board: https://warmup.ai/library/inbound-led-outbound-engine.webp - Full build guide: https://warmupai.notion.site/The-inbound-led-outbound-engine-3eede1f21b8f811b904aeb41bd3c5451 **Content creates the demand. Signals set the priority. People advance the sale.** How to read the board: Left to right. The first column is what we make: the standup, the guides, the pages built for search and AI answers. The second is what catches the response to it. Every captured signal passes through one qualification step and one suppression step, then lands in one of three tiers. Tier 1 and Tier 2 go to a person; Tier 3 goes to a sequence. Everything is written to the CRM, and the loop at the bottom sends what the rep hears back to the start as next week's content. ## Why it helps Most companies I talk to already create engagement. A founder posts, a page gets read, a video gets watched, someone fills in a form and never hears back. Almost all of it disappears, because nothing is watching it and nothing is deciding what it means. The sales team, meanwhile, works a cold list. This engine closes that gap. It treats every reaction, visit, download and reply as a signal, puts each one through the same qualification and suppression it would apply to a cold account, and then routes it by tier so the warmest, best-fit people are in front of a rep the same day with the reason attached. The cold motion does not go away; it becomes the fallback instead of the whole job. It is also the system we sell, pointed at ourselves. The client version assumed signal sources already existed. Ours builds them, because a founder's own content is the cheapest signal source there is. The qualification, suppression and routing layer is the same one in every deployment, which is why this guide can be specific about it. ## The sources Signal creation is the content: a short standup video most days, the open guide library, pages written to answer the questions buyers put to search engines and AI assistants, long-form teardowns, and reviews on the directories AI engines cite. Signal capture is one step per source. Our live ones are LinkedIn engagement (reactions, comments and reposts on our own posts and on posts from a few companies we watch, collected by Apify running through Freckle) and the site's own forms and booking page, where the source field now includes AI search. Identified website visitors and video viewers are drawn on the board and added the same way: one capture step each, the same shape downstream. ## The three tiers | Tier | What it means and who touches it | |---|---| | Tier 1, hot | An active signal on a high-fit account. The rep works it the same day: a call or a message, with the signal and the full engagement history already in front of them. | | Tier 2, warm | Engaged and worth a touch. A sequence that references the signal: email, LinkedIn or a call, each on its own sender. A person still writes the first message. | | Tier 3, fits, no signal yet | Today's cold motion, demoted to the fallback. A nurture sequence, never worked blind. A reply or a fresh signal promotes the record to Tier 2. | ## Why we built it this way - **Build the signal sources; do not wait for them.** The client version of this engine assumed signals already existed. For a small company they usually do not, and a founder's own content is the cheapest source to build. The standup, the guides and the search pages are on the board as parts of the system, not as marketing beside it. - **One qualification step, one suppression step, whatever the source.** A warm signal is tempting to act on without checking. It is still scored against the same ICP facts and the same segments as a cold account, and suppression still runs first: open opportunities, current clients, recent activity, duplicates in the book. Warmth sets the priority, not the rules. - **Two things swap per client. Everything else carries over.** Signal sources swap, and the CRM swaps. Scoring, suppression, ownership, tiering, routing and reporting are the same layer in every deployment, which is what makes the engine repeatable rather than a one-off. - **A reply promotes the record. Nothing else changes a tier.** Fit belongs to the account. Timing belongs to the signal. A reply or a fresh signal moves a record up a tier; a sequence finishing, or time passing, never moves it down past where its fit puts it. - **The gates hold.** Agents draft, a person posts, the rep works Tier 1 and Tier 2 by hand. Nothing external ships unattended, and every number on the report comes from the scorecard, never from memory. - **The loop is the content calendar.** The questions a rep hears on calls and in discovery are next week's standups and guides. Replies and new engagement come back in at the left as signals. The engine feeds itself, so there is no separate content plan to maintain. ## How to build it 1. **Make something, on a schedule you can keep.** A short video most days, one open guide a week, or pages that answer the questions your buyers ask. The schedule matters more than the format: capture needs a steady stream to watch. 2. **Add one capture step per source.** Start with the source you already have. For LinkedIn, a collector that runs on a schedule and returns everyone who reacted, commented or reposted. For the site, make sure every form carries a source field that includes AI search. 3. **Qualify every captured person and company the same way.** Identify the company, enrich the few facts your ICP needs, score the fit, and store it in a database you own. A workflow builder does this in one step; the CRM gets the result, not the work. 4. **Suppress before anyone decides.** Open opportunities out. Current clients out. Anyone with recent activity out, and anyone already in the book deduplicated. One owner field, so two people never work the same record. 5. **Route into three tiers.** Hot, warm, and fits-with-no-signal. Write the tier and the reason on the record so the rep sees why, not just who. 6. **Give each tier one kind of touch.** Tier 1 is a person the same day. Tier 2 is a sequence that references the signal, with a person writing the first message. Tier 3 is a nurture sequence that is never worked blind. 7. **Write everything to the CRM.** Every signal, score, source and tier goes on the account and the contact. Let your sender-sync tool write activity back, so the CRM is the record even though it is not the brain. 8. **Close the loop with a weekly report and next week's content.** Who engaged, how they scored, what was worked, what booked, and what each source is worth. Then take the questions the rep heard and make next week's content from them. ## Copy this: The tier and suppression rules The rules the routing step applies to every signal, whatever its source. The tools in the comments are the examples we use; the rules are the part to copy. ```yaml # engine.yaml suppress_first: # runs before any tier is assigned - open_opportunity # anyone with a live deal - current_client - recent_activity: 14d # touched by anyone in the last two weeks - duplicate_in_book # same company or person already owned - do_not_contact # one list, one writer owner: single_field # a record has one owner or none tiers: tier_1: when: [fit: high, signal: active] touch: person_same_day # a call or a message, history attached tier_2: when: [fit: ok, signal: engaged] touch: sequence_with_signal # person writes the first message senders: {email: one, linkedin: one, calls: one} tier_3: when: [fit: ok, signal: none] touch: nurture_sequence # never worked blind promote: - on: reply -> up one tier - on: fresh_signal -> up one tier demote: never_below_fit # a tier can rise on timing; fit sets the floor record: write: [signal, score, source, tier, reason] # on the account and the contact activity_back: sender_sync # the senders write their own activity into the CRM loop: weekly_report: [who engaged, how they scored, what was worked, what booked, source value] next_content: questions the rep heard this week ``` ## Words we use - **Signal:** Something a company or a person did that suggests now is a good time to talk: a job posting, a comment on a post, a form, a reply. - **Tier:** The rank a company holds on the map because of its fit. A signal moves a company up inside its tier and never changes the tier. - **Fit and timing:** Two separate numbers. Fit is how well a company matches who we sell to, and it belongs to the account. Timing is how fresh the signal is, and it fades. - **Queue:** The one ordered list a rep works from, with a score and a reason to call beside each name. - **Sender:** A tool that delivers messages or calls on one channel: email, LinkedIn or the phone. - **Blocklist:** The companies and people we must never contact. One tool writes it, and every sender reads the same copy. - **Router:** The one step every signal passes through. It matches the signal to a company and a person and puts it in one shape before anything acts on it. ## Talk to a person Want this engine pointed at your own content? WarmUp builds these systems for companies, or places a verified GTM engineer to run them: https://warmup.ai/gtm-systems and https://warmup.ai/hire. WarmUp publishes no pricing. --- # The four-layer GTM stack > One layer decides, one remembers, one records and one touches, with a contract between each pair. - Canonical page: https://warmup.ai/library/four-layer-gtm-stack - By Mike Hurley, founder of WarmUp. This is the layout our own pipeline runs on. - Version 1.0. Last updated 2026-10-01. About 6 minutes. - Board: https://warmup.ai/library/four-layer-gtm-stack.webp - Full build guide: https://warmupai.notion.site/The-four-layer-GTM-stack-3ecde1f21b8f81eb8aadf6b8c9a233b7 **One layer decides. One remembers. One records. One touches.** How to read the board: Left to right, following the numbers: where signals start, the router, the layer that decides, the layer that remembers, and the two layers a person sees (the record and the touch). Each card lists what that part reads, what it writes, and the one thing it never does. ## Why it helps Most teams I talk to own the tools: a CRM, a data tool, a sender or three. What they do not have is an answer to a plain question: when two of those tools disagree about a company, which one is right? Without an answer, every new tool adds another copy of the truth, and the rep ends up checking three places before a call. This layout answers it by giving each layer one job. One layer decides what a signal means. One remembers everything, in a database you own. One records what happened, where the team already works. One touches the buyer. The map, the hiring feed and the social play are all parts of the first two layers. The tools in the last column are the ones we use today, and they are not the ones on the first drawing of this board. We changed senders in September 2026. That is the kind of change the layout is meant to absorb, and it is why the tools are named as examples and the layers are not. ## Why we built it this way - **One router, not one workflow per source.** Every signal, warm or cold or dug out of old CRM history, is matched to a company and a person and put in one shape before anything acts on it. A new source is a new input to the router and nothing else. - **Fit and timing are two numbers.** Fit belongs to the account and changes when a fact does. Timing belongs to the signal and fades. A signal moves an account up inside its tier and never changes the tier. - **Your database is the truth. The CRM gets views of it.** We ruled this in August 2026. The CRM is where people work, so it shows the ranked list with reasons. It is never the only copy. - **One queue.** Everything upstream exists to produce one ordered list a rep can finish in a morning, with the reason to call beside each name. - **One sender per channel, one blocklist writer.** Email, LinkedIn and calling each have one tool. One sync tool keeps do-not-contact identical in all of them and writes their activity back to the CRM. - **Automation prepares, people send.** Nothing creates a deal and nothing starts a campaign on its own. Every write leaves a record of what was checked and what it cost. - **Replies come back in at the left.** A reply, a question on a call or new engagement is a fresh signal. The loop is the same router, so nothing is rebuilt to close it. ## How to build it 1. **Name your four layers before you name a tool.** Write one line each: what decides, what remembers, what records, what touches. If one tool is doing two of these, write down which copy wins. 2. **Stand up the memory first.** One database you own, with three tables to start: companies keyed on domain, people keyed on profile address or work email, and signals you only ever add to. 3. **Build one router.** Every source posts to it. It looks the company and the person up, fills in what is missing, and writes one event in one shape. 4. **Put the rules in files.** Segments, triggers, title lists and weights live under version control. The workflow builder reads them. This is what lets you change builders later. 5. **Score in two numbers.** Store both on the account: fit, and timing with its decay. 6. **Build the queue as a view of the database.** Then show it in the CRM as a list with the score and the reason. Keep it short enough to finish. 7. **Give each channel one sender and the blocklist one writer.** Before you add a second writer to any field, decide which one is being retired. 8. **Send every reply and outcome back to the router.** As a signal. And give the whole thing a reader: one ledger of what ran, what it decided and what it spent. ## Copy this: The contract between layers What each layer reads, what it writes, and what it never does. The tools in the comments are examples. The contract is the part to keep. ```yaml # layers.yaml decide: # a workflow builder, e.g. Freckle or Clay reads: [any signal, the CRM for an existing match, the rules files] writes: [one event in one shape, a fit score, a timing score that fades] never: [a separate workflow per source, a tier changed by a signal] remember: # a database you own, e.g. Postgres reads: [every source, with a rule for which one wins] writes: [the map (status, segment, tier, reason), people and every touch, today's queue] never: [a deleted row, a person matched by name, a second queue kept elsewhere] record: # the CRM reads: [views of the database, activity from the senders] writes: [contact and company updates, the queue score with its reason] never: [a deal created by automation, the only copy of a score] touch: # people, plus one sender per channel reads: [today's queue, the do-not-contact list] writes: [replies and outcomes, back to the router as new signals] never: [a campaign started by code, a second blocklist] rules: - one writer per destination - rules live in files under version control - every write leaves a record of what was checked and what it cost ``` ## Words we use - **Layer:** One of four jobs in the stack: decide, remember, record, touch. - **Router:** The one step every signal passes through. It matches the signal to a company and a person and puts it in one shape before anything acts on it. - **Fit and timing:** Two separate numbers. Fit is how well a company matches who we sell to, and it belongs to the account. Timing is how fresh the signal is, and it fades. - **Queue:** The one ordered list a rep works from, with a score and a reason to call beside each name. - **Sender:** A tool that delivers messages or calls on one channel: email, LinkedIn or the phone. - **Blocklist:** The companies and people we must never contact. One tool writes it, and every sender reads the same copy. ## Talk to a person Want your tools arranged this way? WarmUp builds these systems for companies, or places a verified GTM engineer to run them: https://warmup.ai/gtm-systems and https://warmup.ai/hire. WarmUp publishes no pricing. --- # GTM standup 1: Mapping the market, and where to start > Before any tool gets opened, the CRM says which segments actually bought. Then one audience, cleaned in passes, cheapest check first. - Canonical page: https://warmup.ai/standup/mapping-the-market - By Mike Hurley, founder of WarmUp. Recorded 2026-10-01. - Video (Loom): https://www.loom.com/share/8fa0ba3fa54e413e93ba9f37209bfac4 - The guide this episode walks through: https://warmup.ai/library/icp-map - Tools named: Clay, Freckle, Apollo, Claude Code, Codex I'm restarting something I did for a few weeks last year: a short standup, most days, on one thing I'm actually working on. A workflow, a process, a tool, a win, or something I broke. Day one is market mapping. I redo this for WarmUp over and over, because every time I do it, it gets a little better. Here's the part most people skip. Before I go to work, I go back into our CRM. Who took meetings with us? What industry were they in? What made them raise their hand, and how did they describe the pain in their own words? There's what you think your ICP is, and then there's what the data in your CRM says. They are not always the same thing, and it is worth the time to find out before you start building lists. Then I build the audience. I started in Clay, and these days I mostly run it from Claude Code or Codex through Clay's command line instead of logging in. If you like working in the app, you can ask for a good prompt and paste it into Clay's natural-language builder. After that it is three or four passes to clean it up, cheapest check first. The one I get asked about is the sales and marketing leader check. Apollo's basic people search, run as a step in Freckle, answers it without spending credits. It is slower, and an empty answer is not a no, but it tells you who is home before you pay to learn anything else. Size and revenue bands come from Clay Search, which draws a search quota and not credits. Only then do I pay. A research agent reads the company's own site and says what they sell and who buys it. From there each company gets a segment, and then a tier. Because I'm not in the tools' screens as much now, I'm going to share a diagram with every episode. Fair warning: this first one is a little hard to read. And I went past five minutes on day one, because of course I did. ## The steps 1. Start in the CRM: who took meetings, what they sell, what made them raise their hand. 2. Build the audience in Clay, from the command line or with a prompt in the app. 3. Drop dead domains and the industries that slipped through anyway. 4. Check for a sales or marketing leader with Apollo's basic people search, run through Freckle. No provider credits. 5. Pull size and revenue bands from Clay Search. A search quota, no credits. 6. Only then pay: a research agent reads the company's own site. 7. Assign a segment, then a tier. --- # GTM standup 2: The inbound-led outbound engine, end to end > Your marketing already creates engagement. This workflow captures who engaged, qualifies them, suppresses who you must not touch, and routes the rest to where a rep can act. - Canonical page: https://warmup.ai/standup/inbound-led-outbound - By Mike Hurley, founder of WarmUp. Recorded 2026-10-02. - Video (Loom): https://www.loom.com/share/5e4a6f98cb5346448d2bd75854a47296 - The guide this episode walks through: https://warmup.ai/library/inbound-led-outbound-engine - Tools named: Apify, Freckle, Clay, Supabase, HubSpot, Smartlead, HeyReach Day two, and the workflow I like talking about most: inbound-led outbound. The diagram is the one we drew in August for ourselves. It is the system we sell to clients, pointed at our own business, and most of it is now running. Here's the idea. Your marketing already creates engagement. People react to posts, watch videos, read a page, come back to the site. Almost all of that disappears, because nothing is watching it. This workflow watches it, and then does four things with it. Capture. For this video series, Apify runs through Freckle and collects everyone who reacts, comments or reposts on my posts. I do the same thing on posts from a few tool companies in my space, Freckle and Clay among them, because the people engaging there are often the people I want to talk to. The same shape works for a podcast, YouTube, Reddit or your website; each source needs its own capture step. Qualify. Every company and person who engaged is identified, enriched and scored. I do this in Freckle today, and if you use Clay, go look at Freckle too; they are both good at it, and Freckle has a few advantages I find interesting. Suppress. Before anyone is touched, take out your current clients, your competitors, and anyone you already have a deal or a meeting with. This step is cheap and it is the one people skip. Route. Each company gets a segment, then a tier, and we now score engagement in our own database, in Supabase. The ones that earned it go wherever a rep can act on them. For us today that is a Smartlead campaign on the email side and HeyReach on LinkedIn; the same handoff could put a company into a HubSpot sequence, create a task, or send a Slack ping, and with a tool like Freckle or Clay you can send the record wherever your team works. The takeaway: this bridges the gap between what marketing generates and what sales should be working. A rep's day is usually cold accounts. It should also be the qualified people who already raised a hand, and this is how they get in front of the rep with the reason attached. If you want to brainstorm how this would work for your business, send me a message. I do that with one or two people most weeks, with no pitch attached. ## The steps 1. Capture: a collector returns everyone who reacted, commented or reposted. For us, Apify through Freckle. 2. Qualify: identify, enrich and score every company and person who engaged. 3. Suppress: current clients, competitors, and anyone with an open deal or a meeting on the calendar. 4. Route: a segment, then a tier, then the place a rep can act on it. ## Key pages - The three tracks: https://warmup.ai/tracks - Browse verified engineers: https://warmup.ai/candidates - Join as talent (any email, free): https://warmup.ai/apply - Concise index for agents: https://warmup.ai/llms.txt