WarmList User Manual
WarmList ranks 3-5 prospects or candidates each morning, drafts comments in your voice, and unlocks the DM panel only after 3 contextual public touchpoints. 5 minutes a day. Browser-based. Never auto-posts. Never auto-DMs. Every comment, every DM is your click in your own LinkedIn tab.
Language note. The data model says "candidate" — sales reps should mentally swap "prospect" wherever you see it. Both workflows are identical.
1. What WarmList does (in 30 seconds)
Each comment moves them one stage. The DM panel literally locks until Warm. By the time you DM, they've seen your name three times engaging with their work — reply rates land at 40-45% vs 3-8% on cold InMail.
Browser-based, every action is your click. No cloud automation, no auto-clicks, no ban risk.
2. Getting started (first 10 minutes)
Onboarding runs in this order — the app gates you through each step before the dashboard opens.
chrome://extensions, toggle Developer mode, Load unpacked, pin the icon. Live presence detection auto-advances when you're done.Trial is 5 days. After that, every protected page redirects to billing until you subscribe ($25/mo or $250/yr).
3. The daily 5-minute routine
The core habit. Done well, ~25 comments a week — the volume that compounds into a $20K MRR pipeline.
Auto-fill works on both the home feed and post-detail pages. If LinkedIn's comment box isn't expanded yet, the extension expands it for you, fills in the draft, and surfaces the existing Post button watcher. If something fails (post scrolled out of view, layout edge case), the drawer falls back to copying the draft and taking you to the post's permalink page where filling is reliable.
Critical: clicking LinkedIn's blue Post button is what advances the pipeline. WarmList watches the LinkedIn tab and auto-logs the touchpoint when you click. If the gold toast didn't show, see §9 Troubleshooting → Touchpoint didn't log.
Tip: Fresh 1st-degree connections (just connected, posted within 60 days) skip the warming sequence — DM them directly. The Connections column shows a 📨 DM button on these.
How WarmList picks which post
When you click ✍️ Draft & post, WarmList opens the candidate's most relevant LinkedIn post — not always their newest one. Two rules:
- Skips posts you already commented on for this candidate. The same post never re-opens twice.
- Picks the best post for the touchpoint stage. 1st touchpoint prefers opinion / question posts you can react to without sounding cold-pitchy. 2nd prefers posts you can build on as a peer. 3rd — the pre-DM moment — prefers posts that pose questions you can answer in the comment AND extend in the DM, OR that reveal hiring/intent signals.
The reasoning briefly shows in the LinkedIn tab overlay before the drawer opens. To override, hit back and click ✍️ on a different post manually. If no fresh uncommented post exists, you'll see "No fresh post found" — skip or mark no-posts.
4. The pages (11 sidebar items)
Each page has a single purpose.
📥 1. Queue — Today's 5
The 3-5 candidates worth your next 5 minutes.
Empty state. The first time you open the Queue (or if your pool runs dry), one input asks you for a topic — type something like "platform engineering" → opens LinkedIn's Posts search sorted most-recent-first. Every author you see in those results is posting actively, so anyone you click ✨ WarmList on has fresh content to comment on. The old "paste URL / import CSV" empty state was removed because those paths reliably led to dead-end stale posts.
Ranking. Stage progression weight + intent signals (Open-to-Work, layoff, promotion, recent post) + days since last touch + criteria match (target company, role, skills) + recency boost for fresh connections. Stale candidates (no post in 60+ days) are excluded.
Per-card actions. ✍️ Draft & post · Skip · Snooze (1d / 7d / extend) · 🚫 Mark no posts · Archive. Snooze-extend doubles each click's window — first 7d, then 14d, then 28d, capped at 90d.
🔥 2. Pipeline — Touch-graph kanban (Main track)
Where every candidate lives in the cold→engaged progression.
Connections sub-tabs. Fresh (connected <90d, OR posted <60d, OR you touched them <30d ago — DM directly) · Dormant (1 warming comment, then DM) · Long-cold (full 3-touch sequence or archive).
Drag-and-drop. Any card → any column. Drop targets highlight gold while a card is hovering. Dragging a stale candidate into Cold prompts a confirm so you don't accidentally advance someone with no recent post.
Per-card actions. Every card with a handle gets ✍️ Draft regardless of whether we have post-history yet — that was a 2026-05 change. Per-card "Scan" was removed because it created a "scrape every profile before doing anything" feel; the Pool-level batch scanner remains for users who want to populate post-history for ranking.
✨ 3. Discovery — Ambient capture from your normal browsing
A second pipeline alongside Pipeline. Every meaningful comment you draft via the extension's comment-box trigger lands here — the candidate is auto-added with pipeline_track = discovery.
How candidates land here. Browse LinkedIn normally → click any post's Comment button. A "✨ Draft with WarmList" pill appears above the comment box. Click it → drawer opens with drafts → post the comment → that author is now a Discovery candidate. Subsequent comments register as touchpoints.
Per-row actions. ✍️ Draft (continue warming) · "Add to main pipeline" (promotes to Main track — explicit-intent gate) · Archive.
Why a separate track. Discovery candidates do not enter the daily Queue — they're ambient, not deliberate. Promote-to-main is the explicit gate that says "yes, I'm actively warming this person." Keeps the Queue focused on the 3-5 you decided to work today.
🪣 4. Pool — Searchable network
Search and filter your full reachable network. Two buckets via tab:
- 🧊 Cold Pool — untouched 1st-degree connections (stage = pool). Filterable by recency: Fresh / Dormant / Long-cold / All.
- 🔥 Warm Pool — already warmed (stage = warm or engaged). Ready to DM or already in conversation.
Search. Free-text across name, role, company, notes, location, LinkedIn handle. Filters: role contains, company contains, has-recent-post, no-touch-in-N-days, hide-stale toggle.
Per-row actions. 📨 DM (fresh-recency cold-pool only) · ✍️ Draft (every row with a handle) · 🔥 Warm them (cold-pool only) · Open.
Bulk actions. Header checkbox selects all visible rows. Sticky action bar appears: 📦 Archive · 💤 Snooze 7d · 🚫 Mark no posts · 🎯 Mark placed · Move to stage. Cap: 500 rows per request.
Import — the most important first step. Without it, your Pool is empty and the daily Queue can't suggest fresh-connection DMs as easy wins.
- On LinkedIn → Me → Settings & Privacy → Data privacy → Get a copy of your data.
- Pick Connections only (faster than the full archive). Click Request archive.
- Wait 10-30 min. LinkedIn emails you a download link.
- Unzip · grab
Connections.csv. - Pool page → orange Import LinkedIn Connections.csv button → drop the CSV.
- ~all your connections land at once, auto-classified Fresh / Dormant / Long-cold.
The importer dedupes by handle and self-heals: a connection accidentally tagged "Cold" earlier gets auto-promoted back to Connections when you re-import.
Network scanner — populate "last posted" for connections. The CSV has connection date but not posting date. Click 📡 Scan my network on the Pool page (one-time, opt-in). WarmList walks one connection profile at a time (≤30 per session, 4-8s humanised pacing — well under LinkedIn's safe profile-view threshold) and reads the most-recent post date. Result: connections who actually posted recently get re-classified Dormant → Fresh. Run weekly to keep the Fresh tab populated. Don't close the tab while it's running.
👤 5. Candidates — Master list
The full database. Every candidate, every stage. Same search/filter as Pool but covers ALL stages including placed and archived. Click into a row for the full timeline (touch events, drafts, DMs, surfaced posts), a stage-override panel, and the DM generator.
📝 6. Drafts — Pending comments + DMs
Two parts:
- Live drafts — comments you generated but haven't posted yet. Source post still recent (<60 days).
- Expired drafts — drafts whose source post has aged past 60 days. Collapsed separately so they don't crowd the active list.
Per-draft actions. 📋 Copy · ✏️ Edit · 🔄 Regenerate · ✓ Mark as posted · Discard. 🔄 Regenerate re-runs against your CURRENT voice samples and criteria (use after updating Settings).
📊 7. Analytics — Touch-graph KPIs
"Am I actually warming people?" Four 30-day rolling metrics: comments posted · weekly warmed · DMs sent · DM reply rate. Below: daily timeseries, stage composition, day-of-week posting cadence, and a cohort funnel showing cold→touched1→touched2→warm conversion %. The funnel is the most useful chart — if it tapers off after touched1, your second-comment cadence is broken.
Voice-tuning section shows draft acceptance % and mean edit distance. Acceptance below 50% = update your voice samples.
🧩 8. Extension — Install / update
Required for ~80% of WarmList's value (every ✍️ Draft link, profile auto-fill, scan-pipeline button, comment-box trigger, post-watcher). The page tells you exactly which state you're in:
- ✅ Active — meta tag detected, banner hidden (or "✨ Update available" if your version < latest).
- ⚠️ Installed but disabled — flip the toggle in
chrome://extensionsand refresh. - 🧩 Not installed — banner shows the 6-step install flow.
How it knows the difference: a localStorage breadcrumb is written by the extension on every load of getwarmlist.com. If the extension is disabled, the breadcrumb stops getting refreshed but the last timestamp persists.
📖 9. Manual
You're reading it.
💳 10. Billing — Subscription
One paid plan, two cadences, everything unlimited:
| Cadence | Price | Notes |
|---|---|---|
| WarmList Pro · Monthly | $25 / mo | Cancel anytime |
| WarmList Pro · Annual | $250 / yr | ~17% off · two months free |
Trial is 5 days from booking (or skipping) the demo, no credit card to begin. On day 6 every protected page redirects here until you subscribe. Billed via Paddle as Merchant of Record — US sales tax / EU VAT / GST handled. 14-day refund window on the first paid month.
⚙️ 11. Settings — Profile + voice + criteria
linkedin_handle — filters your own profile out of Queue + Pipeline
Re-scan profile (↻ button) opens your LinkedIn profile in a new tab, lets the extension re-read your name, headline, and recent posts, and pre-fills this form. One-click setup.
Theme toggle — switch between light (default) and dark theme. Lives in the user-menu dropdown at top-right. The choice is cookie-persisted across sessions.
5. The Chrome extension
What it does for you on LinkedIn:
- "+ WarmList" pill on every profile → one-click candidate add. Reads the connection-degree badge (1st / 2nd / 3rd) so 1st-degree adds land in your Connections column instead of as cold prospects.
- "✍️ WarmList" button on every feed post → opens the drawer with 3 voice-tuned drafts.
- "✨ Draft with WarmList" pill above LinkedIn's comment box → on any post-detail page or feed post you click Comment on. This is the Discovery trigger — that author becomes a Discovery candidate, subsequent comments register as touchpoints.
- Auto-fills LinkedIn's comment box when you click ↵ Auto-fill in the drawer. Works on both home feed and post-detail.
- Auto-logs touchpoints when you click LinkedIn's blue Post button. Gold toast confirms in the LinkedIn tab.
- Refuses on stale posts. Posts older than 60 days dim the inline ✍️ button with a 🚫 Stale tooltip.
- Self-recovers when LinkedIn changes layouts. Static rules cover the common cohorts; an LLM rescue identifies new selectors at runtime and caches them per-cohort for 24 hours. You don't need to update anything.
Why a Chrome extension and not cloud scraping: cloud-IP automation hits ~31% account-restriction rates vs ~8% for browser-based (source). The extension runs in your own LinkedIn session, with the same IP, cookies, and fingerprint LinkedIn already trusts.
Mobile note. The extension cannot run on mobile — Chrome on iOS/Android doesn't support extensions, and LinkedIn mobile is a separate native app. WarmList's product surface (sign-in, /app/*) hard-gates below 1024px viewport with a "WarmList is desktop-only" takeover. Marketing pages stay accessible on mobile so you can read the pitch and bookmark for desktop.
6. The touch graph
| Stage | Meaning | How they got here | DM allowed? |
|---|---|---|---|
| Pool / Connections | 1st-degree network | Connections.csv import or quick-add | Fresh-only (📨 DM) |
| Cold | In active warming, no comments yet | Manually promoted from Connections, or quick-added 2nd/3rd-degree | No |
| Touched 1× | 1 contextual comment posted | Auto-advance after 1st comment_posted | No |
| Touched 2× | 2 contextual comments | Auto-advance after 2nd comment_posted | No |
| Warm | 3+ comments — ready to DM | Auto-advance after 3rd comment_posted | Yes |
| Engaged | DM-replied or connection-accepted | Auto-advance on dm_replied / connection_accepted | Yes |
| Placed | Closed (offer signed / deal won) | Manual — terminal | n/a |
| Archived | Removed from active queue | Manual — captures pre-archive stage | n/a |
Stage advances are driven by a database trigger AND a JS-side fallback that recounts touch_events on every comment-posted insert. Both produce the same answer; the fallback exists so the kanban keeps working even if the trigger ever breaks.
7. DM workflow
Available once a candidate is Warm or Engaged.
touch_event = dm_sent, stage stays warm.touch_event = dm_replied, stage = engaged.WarmList never sends DMs autonomously. Every send is your click in your LinkedIn tab. Hard product constraint.
8. Concepts that matter
Voice samples
1-3 of your real LinkedIn comments fed to the LLM as in-context examples (not fine-tuning). Each ≥20 chars, all distinct. Configure in Settings → Voice samples. What works: comments that sound like you — your sentence length, your hedging, your emoji habits. What doesn't: auto-generated text, single-emoji comments, or near-identical entries.
If you change voice samples after some drafts already exist, click 🔄 Regenerate on each affected draft.
The freshness gate
Three places enforce "don't comment on posts older than 60 days":
- The kanban — stale cards render dimmed with a "Stale · last posted Nmo ago" badge. ✍️ Draft is replaced with 🚫 Mark no posts.
- The extension — stale post buttons dim with a tooltip. The auto-action find-post link shows "Skip and find someone else?" instead of opening the drawer.
- The Drafts page — drafts whose source post aged past 60 days move to a collapsible "expired drafts" section.
Mark-no-posts demotes a candidate in the daily Queue for 7 days, then re-surfaces them.
LinkedIn safety limits
- 15-20 connection requests / day — invisible cap. Above this = shadow-restricted.
- ≤50 1st-degree DMs / day — soft cap. Above tags you as a spammer.
- No auto-posting comments. You click Post on LinkedIn, every time.
- No auto-DMs. You click Send on LinkedIn, every time.
- Browser-based only. Cloud-IP scraping has ~31% ban rates vs ~8% browser-based.
The Queue and Pipeline gate against these limits. If you hit your daily DM cap, the DM panel locks until tomorrow.
Two pipelines: Main vs Discovery
Main (Pipeline page) is the deliberate work — candidates you ranked, queued, and chose to warm. Daily 5 always comes from Main.
Discovery (Discovery page) is the ambient capture — anyone you commented on via the extension's comment-box pill. They don't enter the daily Queue. When you decide one is worth deliberate work, click "Add to main pipeline" — that's the explicit-intent gate.
Both tracks use the same touch graph; what differs is where rows surface.
9. Troubleshooting
The "Add to WarmList" pill isn't showing on LinkedIn profiles. Hard refresh the LinkedIn tab (Cmd+Shift+R / Ctrl+Shift+R). The content script needs a fresh page load. If still missing, check chrome://extensions → WarmList → Errors. If the install banner says "installed but disabled," flip the toggle and refresh.
Auto-fill couldn't post — "Can't post a comment here." LinkedIn's home-feed shell only renders the comment textbox once the post's own Comment button has been pressed. The extension expands it for you, but in rare edge cases (post scrolled out of view, layout cohort the extension hasn't seen) the in-place fill bails out and takes you to the post's permalink with the draft preserved. Filling is reliable there.
Touchpoint didn't log — candidate stuck at Cold after I commented. First check: did you see the gold "✓ Touchpoint logged in WarmList" toast in the LinkedIn tab right after clicking Post? If yes — Cmd+R the WarmList tab; the kanban auto-refreshes on focus but a hard reload forces it. If no — three usual causes:
- You closed the LinkedIn tab too fast. WarmList watches up to 5 minutes. If you clicked Post and immediately closed, the watcher might not flush. Open the candidate in
/app/drafts→ ✓ Mark as posted to log it manually. - You used keyboard Enter instead of the blue Post button. WarmList detects clicks. Use the small "After you click Post: ✓ I posted it" button that appears bottom-right of the LinkedIn tab as the override.
- You're signed in to WarmList but the extension isn't seeing the session. Open
/app/extension— fix any "installed but disabled" or version-mismatched banner. If clean, log out + back in to getwarmlist.com once.
Pipeline shows 0 comments this week even though I commented. Same root cause — the touchpoint didn't reach the database. Check the candidate's detail page (Candidates → click row): if no comment_posted event appears under their timeline, log it manually with Mark as posted on the Drafts page.
A connection is showing in Cold instead of Connections. Old import where they got tagged before the connection-degree fix landed. Re-import your Connections.csv — the importer self-heals.
Two "Add to WarmList" pills on profiles. Old extension version. Reinstall the latest from the Extension page.
Drafts don't sound like me. Update Settings → Voice samples with 2-3 of your actual recent LinkedIn comments (each ≥20 chars, all distinct). Then 🔄 Regenerate any pending drafts.
Drafts list has a bunch of "expired drafts." The freshness gate aged them out — source post is now older than 60 days. Either delete them or wait for the candidate to post again.
The "Re-scan profile" button says "Could not read your profile." You're either not logged into LinkedIn or the layout cohort is one the extension's heuristics + LLM rescue haven't seen yet. Make sure you're logged in on linkedin.com/in/me. If the error persists, the extension may be out of date — check the Extension page.
The dashboard is unusable on my phone. By design — the warming workflow can't run on mobile because Chrome extensions don't run on mobile. The product surface gates below 1024px viewport. Open getwarmlist.com on your laptop. Marketing pages (landing, articles, glossary, pricing) stay accessible on mobile if you want to read.
10. FAQ
Is my LinkedIn account safe? Yes. Browser-based extensions running in your own session sit at ~8% restriction rate vs ~31% for cloud-IP automation. WarmList rate-limits all activity to LinkedIn's documented safe thresholds and never auto-posts.
Can I use this on Edge / Brave / Arc? Yes. All Chromium-based browsers support Manifest V3 unpacked extensions. Same install steps; just open edge://extensions, brave://extensions, or arc://extensions.
Firefox / Safari? Not yet. Manifest V3 differences. Chrome-family covers ~85% of recruiters.
Why isn't the extension in the Chrome Web Store? Submission is in progress. For now, Load Unpacked is the install path. Once Web Store-listed, updates are fully automatic.
Does WarmList read my entire LinkedIn? No. The extension only activates on linkedin.com/* and only reads the page you're currently viewing. No background scraping. No reading of other tabs.
Can I import from Hiretual / SeekOut / Apollo / Gem? Yes — Pool → Import CSV. Header row is case-insensitive, LLM fallback for non-standard columns. We dedupe by LinkedIn handle so re-imports are safe.
What if LinkedIn changes their DOM? The extension's structural heuristics auto-recover for most changes. For the rest, an LLM fallback identifies the new selectors at runtime and caches them per-cohort for 24 hours. You don't need to update anything.
How does pricing work? WarmList Pro is one plan: $25/mo or $250/yr (~17% off, two months free). All features unlimited — no per-draft caps, no seat tiers. Every new account starts with a 5-day free trial — no card to begin. Cancel anytime. 14-day refund window on the first paid month.
Why does the kanban hide 'Long-cold' connections? The default Connections tab shows Fresh first because that's the most actionable bucket. Long-cold (>2 years, no recent activity) is still there — switch to that tab when you want to review them.
I have 500 LinkedIn connections but my Pool shows 1. What's wrong? You haven't run the Connections.csv import yet. The extension's auto-detect of 1st-degree status only fires when you visit a profile directly, so the trickle path covers <5% of your network. The bulk path is the LinkedIn Connections.csv export — see §4 → Pool for the 6-step walkthrough.
My 500 connections — aren't they all "warm"? Mutual approval gives access, not warmth. A cold DM to someone you connected with last month converts ~25%; a cold DM to someone from 2022 you haven't spoken to since converts ~3% — about the same as a stranger. WarmList classifies by recency of contact, not connection degree. Fresh connections get the 📨 DM button (no warming needed). Dormant + Long-cold get 1-3 public comments first to re-establish presence.
What's the difference between Pipeline and Discovery? See §8 → Two pipelines: Main vs Discovery. Pipeline is the deliberate work — candidates you ranked and chose to warm. Discovery is the ambient capture — anyone you commented on via the extension's comment-box pill while browsing. Discovery candidates don't enter the daily Queue until you promote them.
Light or dark theme? Either. Toggle is in the user-menu dropdown at top-right. Cookie-persisted.
11. Glossary
- Touch graph — the 5-stage progression each candidate moves through (cold → touched1 → touched2 → warm → engaged), driven by counted touch events.
- Touchpoint — any logged interaction: comment posted, DM sent, connection accepted, profile visited.
- Warm — candidate has 3+ comment touchpoints and is unlocked for DM outreach.
- Connections — your 1st-degree LinkedIn network. The leftmost kanban column. Renamed from "Cold Pool" because the old name implied these were prospects rather than your existing network.
- Recency bucket — Fresh / Dormant / Long-cold classification of your Connections, derived from connection date + last post + last touch.
- Warm Pool — candidates at Warm or Engaged stage, ready to DM or already in conversation.
- Pipeline — the kanban view of who's at each touch-graph stage, Main track only.
- Discovery — second pipeline that captures candidates from the extension's comment-box trigger. Doesn't enter the daily Queue.
- Queue — today's ranked 3-5 candidates from the Main track.
- Voice sample — one of your real LinkedIn comments the AI uses as style reference.
- Intent signal — flag like Open-to-Work, layoff-affected, recent promotion, posted recently — boosts queue rank.
- Freshness gate — the 60-day cutoff that blocks drafts on stale posts. Enforced in the kanban, the extension, and the Drafts page.
- Snooze-extend — escalating snooze that doubles the remaining hidden window each click, capped at 90 days.
- Bulk action — checkbox-multi-select on Pool → sticky action bar → archive / snooze / mark-no-posts / move-to-stage on up to 500 rows.
- Tier 0 (embed extraction) — on permalink pages the extension fetches LinkedIn's public embed endpoint instead of parsing the rendered DOM. Faster (~700ms vs 2-15s) and immune to layout cohort changes.
Need more help?
Email hello@indiaschool.ai. Beta users get a reply within 24h on weekdays.