X DM automation has matured into a real channel since the API re-launched at Basic and Pro tiers in 2024. The economics work: $100/month buys you ~24,000 DMs/month per account, the OAuth flow is stable, and webhook-based inbound makes real-time response practical.
What has not changed is the discipline required. X is harsher than Telegram on spam patterns and the recovery options are worse; a single weekend of bad outreach can suppress your for-you reach for a month. This guide is the playbook for staying inside X's envelope.
Step 1: Confirm you have the right X API tier
X API access tiers as of 2026:
- Free: limited DM read, no programmatic send at scale. Useful for testing, not for production.
- Basic: $100/month, ~1,000 DMs per day per user. The right tier for individual operators and small teams.
- Pro: $5,000/month, ~10,000 DMs per day per user, multi-user app support, higher rate ceilings. The right tier for agencies or anyone running 5+ X accounts.
- Enterprise: custom pricing. Negotiate directly with X for unusual volumes.
CRM Solid Pro plans include API access at the Basic level for up to 3 X accounts. Beyond that, you can either bring your own API credentials or upgrade to the Pro tier through our managed partnership.
Step 2: Connect your X account via OAuth 2.0
Budget: 3 minutes per account. CRM Solid uses OAuth 2.0 with PKCE, the modern, secure flow. No need to paste consumer keys manually anywhere.
- Go to Accounts > Add X account.
- Click Authorize with X. You will be redirected to X's consent screen.
- Confirm the scopes:
dm.write,dm.read,tweet.read,users.read. - On approval, you are bounced back to CRM Solid. The encrypted access + refresh tokens are stored server-side and the worker uses them transparently.
- You will see a "Connected" badge with the X handle and "DM-write enabled" status.
You can revoke the connection at any time from the same screen (or from twitter.com/settings/connected_apps). Revocation is immediate; CRM Solid stops dispatching DMs from that account within seconds.
Step 3: Set per-account rate limits to 80% of ceiling
X publishes a ~1,000 DM per 24-hour limit per user. CRM Solid defaults to 800/day so you have headroom for replies and occasional automatic platform throttling.
In Settings > Rate limiter > X account:
- Per day: 800 (sub-ceiling buffer).
- Per hour: 60 (sub-window buffer).
- Per minute: 5 (X enforces this with 429).
- Min interval: 12 seconds.
- Business hours only: on (DMs at 3 AM look bot-like).
For a fresh X account (less than 90 days), reduce these to 300/day, 30/hour, 30-second interval. Mirror the warm-up principle from Telegram; new accounts on any platform need time to earn trust.
Step 4: Build a warm-only audience segment
The single biggest lever on X DM reply rate is who you DM. The published 1,000/day ceiling is meaningless if 90% of recipients never see the message because their DM privacy is locked.
A useful X DM-eligible segment requires the recipient meets at least one of:
- Follows you: your DMs are visible by default.
- Has open DMs enabled: anyone can DM them.
- Has DMed you previously: established thread.
- Has @-mentioned you in the last 30 days: opted into the conversation.
In CRM Solid's Contacts > Segments > New, build:
Segment: X DM-eligible
Channel = X (Twitter)
AND (
is_follower = true
OR open_dms = true
OR has_dmed_us = true
OR has_mentioned_us_within = 30d
)
AND blocked_us = false
AND opted_out_of_dms = falseOn a typical 10K-follower account, this segment lands around 500-2,000 contacts (followers + open-DM-strangers visible through your network). Reply rate to this segment averages 18-35%, compared to 1-3% on a raw scraped list. The volume is smaller but the conversions are dramatically better.
Step 5: Write context-anchored templates
X users are bombarded with generic outreach. Templates that open with "Hey, hope you are doing well" are deleted in 2 seconds. The signature of a template that actually gets read is a real-time, real-context anchor.
# Template 1: Recent-tweet anchor
{Hi|Hey} {first_name}, {saw|caught|just read} your {tweet|thread}
about {tweet_topic} {today|earlier}. {Genuinely useful|Great take|Solid framing}.
Quick question - {do you have|are you using|are you trying} {related_tool}
for that, or {still doing|still hacking|workshopping} it manually?
# Template 2: Follow-back anchor
{Thanks|Cheers} for {the follow|following|connecting}, {first_name}!
{Curious|Wondering} what {pulled you in|caught your eye};
{the {topic} content|the {company} updates|the threads}?
Always {open to|down for|happy to} {trade|swap|share} notes if you
work on {related_area}.
# Template 3: Mutual-connection anchor
{Hi|Hey} {first_name}, {noticed|saw} we both {follow|interact with}
{mutual_handle}; {they mentioned|saw your reply on|came across via}
{their tweet about {topic}}. Working on {related_problem} at the moment.
{Open to|Down for|Up for} a quick exchange of ideas?
# Template 4: Recent-mention anchor
{Hi|Hey} {first_name}, you {mentioned|tagged|shouted out} us in
{your tweet|the thread|that reply} about {topic} {a few days ago|recently}.
Wanted to {say thanks|circle back|follow up} and check;
{is anything we can help with|what would make this easier|are you exploring tools for that}?
# Template 5: Reply-history anchor
{first_name}, {appreciated|loved|enjoyed} your reply on our
{tweet|thread} about {topic}; you {framed it|put it} better than we did.
{Mind if|Open to} I {ping you|drop you a note} about a {related|adjacent} thing
we are building? {No pitch, just curious|Strictly research, no sell}.
# Template 6: Niche-content anchor
{Hi|Hey} {first_name}, working through your {recent thread|pinned post|series}
on {topic}; section on {sub_topic} was {sharp|excellent|spot-on}.
{Quick question|Curious}: how do you {handle|approach} {related_problem}
in the {current setup|workflow}?Step 6: Enable intent-based AI replies for inbound
X DM volume balloons fast. A 800/day outbound campaign at 20% reply rate generates 160 inbound DMs per day. Without automation, that backlog kills follow-through.
CRM Solid's intent classifier reads each inbound DM and assigns one of 5 intents:
- interested: clear positive signal, may ask for more info or want a demo.
- not-now: interested in principle but timing is wrong ("next quarter," "after Q3 budget").
- unsubscribe: explicit opt-out request. Auto-flagged and never messaged again.
- complaint: angry, hostile, accusing-of-spam. Auto-flagged for human review and apology.
- question: has a substantive question that needs a human or AI agent answer.
In Settings > AI > X inbound:
- Turn on intent classification.
- For
interested: send a follow-up template with calendar link, route to assigned owner. - For
not-now: send a deferred-followup template, schedule the contact for re-engagement in 60 days. - For
unsubscribe: send confirmation, flagdo-not-contacttag, no further messages ever. - For
complaint: route to operator, do not auto-reply. - For
question: route to AI sales bot (if configured) or operator.
Across a typical week, the AI handles 40-60% of inbound with zero human touch. The remaining 40-60% (high-intent and complaints) gets your full attention.
Step 7: Run a 30-DM pilot
Budget: 90 minutes (15 min sending, 75 min monitoring). Launch the first 30 DMs from your warm-segment to your highest-quality contacts. Watch the dashboard.
Healthy targets in the first 90 minutes:
- 0 × 429 (rate-limit) events.
- 0 × auth-fail errors (token rotation working).
- Reply rate trending toward 18-30% (warm segment baseline).
- 0 blocks within 90 minutes (very rare on warm).
- 0 complaint-intent classifications on AI inbound.
If any of these is off, pause. Investigate before raising the cap.
Step 8: Scale to 800/day and monitor weekly
After a clean pilot, raise the daily cap to 800. The next 7 days you watch the dashboard daily; after week 1 you can drop to weekly review.
Weekly health metrics to watch:
- Reply rate: flat or rising is good; falling 5%+ week-over-week is template fatigue, rotate templates.
- Block rate: should stay under 1%; if rising, your warm segment is degrading, refresh it.
- 429 events: should be zero; any 429 means you are too close to the ceiling, drop daily cap 100.
- Reach decay: your for-you reach on tweets should stay stable; if it drops noticeably, X is throttling you, pause DM volume for 7 days.
- Complaint rate: over 1 complaint per 200 sends is a campaign-level issue, audit templates and audience.
X campaigns done right look like a polite professional networking practice operating at slightly above-human speed. That is intentional. The platform tolerates pace; it does not tolerate spam patterns.