There are two completely different activities hiding behind the phrase "DM members at scale."
One is a blast: same text, everybody, as fast as the send button allows. It feels efficient for about a day. Then members learn that a message from you carries no information, and they stop opening. You have burned the one channel where you had a guaranteed read.
The other is a batch of individual messages that happen to be sent close together. Each one is addressed to a person for a reason that person can recognise. That scales fine, and members do not experience it as spam, because it isn't.
This is how to do the second one.
What is the one rule that keeps bulk DMs from reading as spam?
Every message needs a reason the recipient can identify within the first sentence.
Not "hey, hope you're well." A reason. You commented on the pricing thread. You joined nine days ago and haven't posted. You were in the top five on the leaderboard last month and I never said thank you. You asked about the onboarding call and I never followed up.
If you cannot state the reason, the person does not belong in this batch. That single test does more work than any amount of clever copywriting. It also naturally caps your volume, which is the point — a list where every member has a specific reason is usually far smaller than your roster, and far more likely to get replies.
A useful gut check: if a member forwarded your DM to another member, would the two of them notice they got the same message? If yes, rewrite or split the list.
How do I DM Skool members at scale by hand?
You can run a personalised DM batch by hand today with nothing but a spreadsheet and an evening — no tool required. Here is the manual version, start to finish.
- Pick one trigger. Just one. New joiners from the last fourteen days. Everyone who commented on your most recent post. Members who were active a month ago and have gone silent. Pick the group you would most regret ignoring.
- Build the list somewhere you can see it. A spreadsheet with three columns: name, the reason they're on the list, and one specific detail about them. Ten to thirty names is a healthy batch. If you have four hundred, you picked too broad a trigger. If you are not sure how to slice your roster, start with member segmentation.
- Fill in the detail column. This is the slow part and the part that matters. Open each profile or the post they commented on and write one true, specific sentence. "Asked about pricing for teams." "Runs a bookkeeping practice." "Said the module 3 worksheet confused her."
- Write one message body. Two to five sentences. State why you're reaching out, say one useful thing, and ask one easy question. Do not stack three asks.
- Write a bespoke first line for each person using the detail column. Everything after it can be identical. This is where the "personalised" feeling actually comes from — nobody notices that sentences two through four repeat.
- Send them yourself, spread over days. Twenty to twenty-five a day is a sane ceiling. Send in the window your members are actually online rather than at 3am your time — the same reasoning that governs when to post.
- Reply to every reply within a day. If you are not prepared to have thirty conversations, do not start thirty conversations. This is the step people skip and it's the one that determines whether the batch was worth doing.
That process works. It also costs a real evening once you're past a dozen or so people, mostly in step 3, and it goes stale the moment you close the spreadsheet.
Where does a tool actually save time on Skool DMs?
A tool saves time on Skool DMs in three places: building the list, writing the per-person detail, and keeping track of who got what. Those are the parts Skoolgrades handles, and it is worth being precise about which parts it does and does not touch.
Building the list
In Targets you can build a member list three ways:
- Pick a recommended group — an already-materialised cohort like new joiners, members who are fading, or people prolific elsewhere on Skool but silent with you.
- Describe who you want in plain language — say what kind of member you're after and get a list back.
- Paste a post URL and pull everyone who engaged with that post.
That third one is the sleeper. "Everyone who commented on the thread where I floated the workshop idea" is exactly the kind of list that's obvious in principle and miserable to assemble by hand. You can also search your DM list by post activity or by interest theme rather than only by name, which is how you find "the people who care about hiring" without remembering names.
Drafting
You write one message for the saved list, then choose:
- Verbatim — the same text to everyone. There is no language model in this path at all, so it costs nothing to run. Fine for genuinely universal announcements.
- Personalised per member — each draft is rewritten for that specific person using what Skoolgrades already knows about them. This is the mode that replaces your detail column.
Approving and sending
Every draft is reviewed and approved by you before anything moves. Then sending happens in the extension panel, which walks your approved queue one member at a time — you click send for each message. Nothing goes out on its own.
Why do I have to click send on every DM?
You click send on every DM because a human reading each draft is both an account-safety measure and a quality filter. It would be technically easier to fire the whole queue; here are the two reasons Skoolgrades does not.
Automated blasts are how owners get flagged. A burst of identical messages from one account is the exact pattern platforms watch for. Your Skool account is the thing your business sits on. It is not worth risking to save fifteen minutes of clicking.
And they're how members learn to ignore you. The DM inbox works because it's scarce. Every low-value message you send makes the next one less likely to be read. A human reading each draft before it goes is a crude but extremely effective quality filter — you will kill a meaningful share of your own drafts, and those are exactly the ones that should die.
The clicking is not overhead. It's the last checkpoint.
What are the limits on sending Skool DMs through Skoolgrades?
Two limits govern Skool DMs sent through Skoolgrades: you can only message people you already have a DM thread with, and there is a daily and monthly send cap. Both are worth planning around before you build a list.
You can only DM members you already have a channel with. Skoolgrades reads your existing DM threads and sends into them. It does not create new DM channels with people you've never messaged. If your goal is to cold-message every member you've never spoken to, this isn't that, and you should know it now rather than after paying.
There are send limits. On Grow ($19/mo) it's 25 DMs a day and 100 a month. On Pro ($99/mo) it's 25 a day and 500 a month. Those numbers are deliberate. Twenty-five a day is roughly the volume a person can actually follow up on, which is the real bottleneck anyway.
Chat data is also list-only: Skoolgrades sees your DM threads and unread state, not a full history backfill of every conversation you've ever had.
Who should be on my Skool DM list?
Your Skool DM list should hold only members who share one recent, statable trigger, chosen before you write a word. Most DM batches fail at selection, not at copy. Some triggers that reliably produce a reason worth stating:
| Trigger | Who's on the list | What you're actually asking |
|---|---|---|
| Joined in the last 14 days, no post yet | New and quiet | One sentence about what brought them |
| Commented on a specific post | Self-selected interest | Their take, or an invite to go deeper |
| Active a month ago, silent since | Drifting | Whether something changed |
| Top of the leaderboard, never thanked | Your best people | Nothing — just say thank you |
| Prolific elsewhere on Skool, silent here | Habit exists, not in your room | What would make this room worth their time |
That last row is the one owners underuse. A member who posts every day in three other communities is not disengaged. They have the habit; they just haven't built it with you. That's a completely different conversation from the one you'd have with someone who has gone quiet everywhere.
How do I tell whether a DM batch worked?
Judge a DM batch by replies and by whether those members showed up in public afterwards, not by opens. Do not judge a DM batch by opens. Judge it by replies, and then by whether those people showed up in public afterwards — a comment, a reply, a poll vote.
That's worth saying because Skoolgrades counts a member as engaged only when they comment, reply or vote in a poll — not when they load the page — so its figure reads lower than a visit-based engagement rate (why that matters). It's also the number that moves when a DM batch actually lands.
If you want the fuller picture, the message is rarely the hard part. Knowing who is about to leave and which lurkers are worth activating is what makes a batch worth sending at all.